#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;
}