')' 标记之前的预期主要表达式,switch-case

tst*_*ile 4 compiler-errors case switch-statement

这是我正在阅读的一本书中的 switch case 语句的示例,我在其他示例中也遇到了麻烦,但我已经能够自己解决它们。我不知道我错过了什么。我在遇到问题的行上发表了评论,我在 ) 令牌错误之前不断收到预期的主要表达式。

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;
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*nko 5

switch语句期望您将变量传递给它,而不是类型。但你正在传递类型,即enum Days. 所以你应该首先声明这种类型的变量:

enum Days days = Sunday;
Run Code Online (Sandbox Code Playgroud)

...或者如果您使用 C++,您可以省略enum

Days days = Sunday;
Run Code Online (Sandbox Code Playgroud)

然后提供这个变量来切换,就像这样

switch (days) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

您可能还应该default:在开关中添加部分来处理错误情况。

编辑

如果您需要询问用户输入,并且我假设您使用的是 C++,您可以使用std::cin以下命令:

int day;

std::cout << "Enter day number (0..6): ";
std::cin >> day;

switch (day) {
Run Code Online (Sandbox Code Playgroud)

但你可以更优雅地解决这个任务,如下所示:

#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;
}
Run Code Online (Sandbox Code Playgroud)