这是我的代码
#include <stdio.h>
int main()
{
enum Month
{
January,
February,
March,
April,
May,
June,
July,
August,
September,
October,
November,
December
};
char m1, m2;
enum Month Month1, Month2;
printf("Enter the first month: ");
scanf("%s", &m1);
printf("nEnter the second month: ");
scanf(" %s", &m2);
所以这里我接受用户输入字符串变量,然后我尝试类型转换,但它没有工作
Month1 = (enum)m1;
Month2 = enum m2;
printf("Difference between 2 months in a year is : %d month.n", Month2 - Month1);
}
有什么办法可以做到吗?提前谢谢。
enum
以及变量名存在的唯一目的是程序员。用户不了解它们,也不应该关心它们。同样,编译器将删除最终二进制可执行文件中的所有命名项。
因此,将enum作为输入没有任何意义,因为enum只是程序员更容易跟踪自己程序中使用的数字的一种方式。它没有其他用途。
您应该做的是将输入作为一个合适的字符串,然后使用strcmp
将其与字符串列表进行检查。
不能将字符串强制转换为枚举常量名称以获得该枚举常量。你真正做的是强制将字符串的地址作为枚举索引,这是未定义的行为。
你可以写一个函数来映射它:
enum Month fromString (char *str)
{
if(strcmp(str, "January") == 0)
{
return January;
}
// and so on..
}