введите символ в переменную перечисления, используя scanf в c

#c #enums #scanf

Вопрос:

Привет, ребята, мне нужно написать программу для университета, которая организует очередь с использованием перечисления, но у меня много проблем с перечислением.

 int main() {

enum priority {
    L , l, n, h, H      //Todo: Priority enum Lowest = 0 Highest = 4
};

char option = 'X';
printf("Priority: ");
scanf(" %c", amp;option);
enum priority priorityvar = option;
printf("%d", priorityvar);
 

Проблема в том, что, когда я сканирую символ, для переменной priorityvar всегда устанавливается значение буквального символа, и перечисление не распознается, и я не могу прочитать его непосредственно в переменную, потому что компилятор выдает мне предупреждения о том, что я не могу адресовать переменную типа enum с %d или %c. У кого — нибудь есть идеи, как это решить? Я чувствую, что это можно было бы решить проще без перечисления, но я должен использовать перечисление для решения задачи для uni

Комментарии:

1. Вы устанавливаете переменную приоритет в нигде после ее инициализации. Просто назначьте параметр переменной переменной priorityvarу. В чем проблема?

2. Проблема в том, что переменная затем устанавливается в символ c, и когда я распечатываю priorityvar, она выдает мне код ascii буквы вместо номера перечисления

3. Также вам нужно назначить целое число 0, 1, 2, 3 или 4 вместо символа.

4. Если бы вы назвали L как, скажем LOWPRIORITY , тогда ситуация становится более очевидной. И это имя даже не присутствует в коде среды выполнения (за исключением, возможно, отладчика).

5. switch (option){ case 'L': priorityvar=0; break; ... }

Ответ №1:

вам нужно преобразовать символ, представляющий цифру, в ее целочисленное значение.

 enum priority priorityvar;
if(isdigit((unsigned char)option amp;amp; option >= '0' amp;amp; option < '5') priorityvar = option - '0';
else { /* wrong input - handle error*/ }
 

или, если вы хотите, чтобы письмо представляло приоритет:

 switch(option)
{
    case 'L':
        priorityvar = L;
        break;
    case 'l':
        priorityvar = l;
        break;
    case 'n':
        priorityvar = n;
        break;
    case 'h':
        priorityvar = h;
        break;
    case 'H':
        priorityvar = H;
        break;
    default:
        /* handle error */
        break;
}