сохранение перечисления в подписанном char и сравнение с перечислением не удается в C - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь прочитать перечисление и сохранить его в подписанном char. Позже я пытаюсь сравнить сохраненное значение с фактическим перечислением, и это не удается. Пожалуйста, дайте мне знать, если у кого-нибудь есть лиды.

typedef enum {
test1,
test2,
test3,
}Testenum;

в главном у меня есть следующий фрагмент кода

signed char test;
int ret = sscanf(argv[2], "%c", &test);
printf("%c", test);
if ((ret ==1) && (test <= test3))
   printf("Success");
else
   printf("failure");

Я ввел «xxx xxx 1» и 1-й отпечаток печатает «1» а затем "отказ". Я проверил, что ret равно 1, поэтому второе условие не выполняется.

1 Ответ

1 голос
/ 06 мая 2020

Вы сравниваете символьное значение '1' с числом 3, и оно больше 3. Чтобы сравнить число 1 с числом 3, вам необходимо преобразовать символ '1' на номер 1. Вы можете сделать это, вычтя '0' из символа (при условии, что это символ di git, поскольку символы от '0' до '9' имеют последовательные числовые значения в наборе символов). Например:

if (test >= '0' && test <= '9') {
    int v = test - '0';
    if (v <= test3)
        printf("Success\n");
    else
        printf("Failure\n");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...