在switch语句c ++中枚举数据类型

时间:2014-04-22 12:45:27

标签: c++ enums switch-statement

首先忍受我,我是一个菜鸟。

我正在尝试编写一个输出一周中几天的程序。例如,如果一个人输入day1,则输出星期日,星期一,星期一,依此类推。我使用了一个switch语句,其中一个int映射到一个用于switch case的枚举。我似乎遇到的问题是它似乎没有用,至少在我输入day1时没有。当我使用int值1到7时,它按预期工作。我试图找到解决方案,到目前为止,只有墙壁才能帮助。

这是我的代码:

enum days{day1,day2,day3,day4,day5,day6,day7};
int day;

cout<<"Enter the day of the week in format day1 through day7 ";
cin>>day;

   switch(day)
   {
    case day1:
    cout<<"Sunday";
    break;

    case day2 :
    cout<<"Monday";
    break;`
   }

2 个答案:

答案 0 :(得分:0)

如果您想接受day1day2等输入,那么为什么将输入变量声明为int,它应该是char数组.. 如果您想接受12之类的输入,那么它有点好......

如果要输入字符串然后将其与枚举值进行比较,则首先必须将其转换为整数值。

你可以这样做,

char day[4];
cin>>day;
int d=day[3]-49;

然后像你一样在开关中使用它。

switch(d)
{
case days::day1:
cout<<"Sunday";
break;

case days::day2 :
cout<<"Monday";
break;

答案 1 :(得分:0)

如果您希望用户输入day1并将其映射到枚举,则需要自己解析输入中的整数值。您可以将其作为字符串读取,然后自己解析或使用scanf的稍微非C ++解决方案:

int dayNum = 0;
char buff[16];
scanf("%[^0-9]%d", buff, &dayNum);

还要记住,枚举从值0开始,如果你希望它们从1开始,那么你必须将枚举更改为:

enum days{day1=1,day2,day3,day4,day5,day6,day7};
              ^^

day2,day3等将具有值2,3,...