这是我阅读的书中的开关案例陈述的一个例子,我也遇到了其他例子的问题,但我自己也能解决这些问题。我不知道我错过了什么。我对我遇到问题的一行做了评论,我之前一直得到预期的主要表达式)令牌错误。
int main()
{
enum Days{
Sunday=0,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday};
switch(Days) { //expected primary-expression before ')' token
case Sunday:
cout<<"Sunday was named after the Sun.";
break;
case Monday:
cout<<"Monday was named after the Moon.";
break;
}
return 0;
}
答案 0 :(得分:4)
switch
声明希望您将变量传递给它,而不是类型。但是您传递的是类型,即enum Days
。所以你应该首先声明这种类型的变量:
enum Days days = Sunday;
...或者如果你使用C ++,你可以省略enum
:
Days days = Sunday;
然后提供此变量来切换,就像那样
switch (days) {
...
}
您也可能应该在交换机中添加default:
部分来处理错误情况。
修改强>:
如果您需要询问用户输入,并且我假设您使用的是C ++,则可以使用std::cin
:
int day;
std::cout << "Enter day number (0..6): ";
std::cin >> day;
switch (day) {
但是你可以更优雅地解决这个问题:
#include <iostream>
#include <cstdlib>
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
int main()
{
const char *days[] = { "Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday" };
int day;
std::cout << "Enter day number (0..6): ";
std::cin >> day;
if (day < 0 || day >= ARRAY_SIZE(days)) {
std::cerr << "Bad day" << std::endl;
return EXIT_FAILURE;
}
std::cout << days[day] << std::endl;
return EXIT_SUCCESS;
}
答案 1 :(得分:0)
您需要根据变量或表达式进行切换。因此,如果您声明一个变量&#39; d&#39;类型&#39;天&#39;你可以写:switch(d)。