工作日转换案例和枚举

时间:2019-03-23 03:46:24

标签: c enums switch-statement case

我正在尝试使用C进行大小写转换和枚举的程序创建。我想插入一个在枚举日中预设的工作日。 该程序运行正常,但是在输入工作日时收到错误消息。 代码如下所示:

XD

我该如何正确书写?

1 个答案:

答案 0 :(得分:1)

带有scanf指定符的

%s扫描字符串,而不扫描enum。确保您了解正在使用的所有数据类型!

不幸的是,C并不真正在乎您分配给enum成员的实际名称:它们只是供您自己用作程序员使用,不能由程序本身访问。尝试这样的事情。

const char* names[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", NULL}; // The name of each day, in order

char buffer[16]; // A place to put the input
scanf("%15s", buffer); // Now `buffer` contains the string the user typed, to a maximum of 15 characters, stopping at the first whitespace

for(int i=0; names[i] != NULL; i++){ // Run through the names
    if(strcmp(buffer, names[i]) == 0){ // Are these two strings the same?
        printf("Day number %d \n", i+1); // Add one because you want to start with one, not zero
        return;
    }
}

printf("Sorry, that's not a valid day"); // We'll only get here if we didn't `return` earlier

我将工作日名称存储为字符串,程序可以访问。但是比较字符串需要strcmp函数而不是简单的==函数,因此我不能再使用切换用例了,而必须使用循环。