【问题标题】:Expected primary expression before ')' token, switch-case')' 标记之前的预期主表达式,switch-case
【发布时间】:2015-02-21 18:41:28
【问题描述】:

这是我正在阅读的书中的 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;
}

【问题讨论】:

    标签: compiler-errors switch-statement case


    【解决方案1】:

    switch 语句要求您将 variable 传递给它,而不是 type。但是您传递的是 type,即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;
    }
    

    【讨论】:

    • 程序现在可以编译,但输出只是“星期日以太阳命名”。我想我应该问的是如何在输入 0-6 的地方进行输入以指示日期并将其输出到屏幕上。我可以使用 if-else-if 语句来做到这一点,但我试图将其转换为 switch-case 语句,现在我完全迷失了。顺便说一下,这是C++
    • 好的,至于您的“输入”问题——请参阅我原来的答案中的 EDIT
    • 谢谢!很有帮助。
    【解决方案2】:

    您需要根据变量或表达式进行切换。因此,如果您声明一个类型为“Days”的变量“d”,您将能够编写:switch(d)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-29
      • 2013-02-23
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多