首页 > 解决方案 > 使用c中的scanf将字符输入到枚举变量中

问题描述

大家好,我需要为大学编写一个使用枚举组织队列的程序,但我在枚举方面遇到了很多问题。

int main() {

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

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

问题是当我扫描变量priorityvar总是设置为文字字符并且枚举没有被识别的char时,我无法将它直接读入变量,因为编译器给我警告说我无法寻址带有 %d 或 %c 的枚举类型变量。有人知道如何解决这个问题吗?我觉得如果没有枚举,这本可以更容易解决,但我必须使用枚举来解决 uni 的任务

标签: cenumsscanf

解决方案


您需要将表示数字的 char 转换为其整数值。

enum priority priorityvar;
if(isdigit((unsigned char)option && option >= '0' && 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;
}

推荐阅读