首页 > 解决方案 > 将枚举存储在有符号字符中并在 C 中与枚举进行比较失败

问题描述

我正在尝试读取枚举并将其存储在签名字符中。后来我试图将存储的值与实际的枚举进行比较,但它失败了。请让我知道是否有人有线索。

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

在 Main 我有下面的代码

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”,然后是“失败”。我验证了 ret 是 1,所以第二个条件失败了。

标签: cenums

解决方案


您正在将字符值'1'与数字进行比较3,它大于 3。要将数字 1与数字进行比较3,您需要将字符转换'1'为数字1。您可以通过'0'从字符中减去来做到这一点(假设字符是数字,因为字符'0''9'字符集中具有连续的数值)。例如:

if (test >= '0' && test <= '9') {
    int v = test - '0';
    if (v <= test3)
        printf("Success\n");
    else
        printf("Failure\n");
}

推荐阅读