【问题标题】:Switch statement (string) keeps selecting default value unless its zeroSwitch 语句(字符串)一直选择默认值,除非它为零
【发布时间】:2020-10-18 19:38:24
【问题描述】:

Switch 语句仅在我将 cout

#include <iostream>

#include <cmath>

#include <string>

#include <cstring>
using namespace std;

    string getDayOfWeek(int dayNum) {
    string dayName;

    switch (dayNum) {
    case 0:
        dayName = "Sunday";
        break;

        switch (dayNum)
    case 1:
        dayName = "Monday";
        break;

       switch (dayNum)
    case 2:
        dayName = "Tuesday";
        break;

        switch (dayNum)
    case 3:
        dayName = "Wednesday";
        break;

        switch (dayNum)
    case 4:
        dayName = "Thursday";
        break;

        switch (dayNum)
    case 5:
        dayName = "Friday";
        break;

        switch (dayNum)
    case 6:
        dayName = "Saturday";
        break;

    default:
        dayName = "Invalid Day Number";
    } 

    return dayName;
}

int main()
{
    cout << getDayOfWeek(5);
    return 0;
}

【问题讨论】:

  • 不要一遍又一遍地重复switch (dayNum);只保留第一个,删除所有其他。正如所写,您的代码并没有按照您的想法执行。
  • 也不要使用using namespace std

标签: c++ string visual-studio visual-c++ switch-statement


【解决方案1】:

您可以通过使用数组来避免switch 语句:

static const char day_names[] =
{
    "Sunday", "Monday", "Tuesday", "Wednesday",
    "Thursday", "Friday", "Saturday"
};

const std::string day_of_week = day_names[dayNum];

switch 语句会为您的项目添加更多代码行,这会增加复杂性和出现缺陷的可能性。

【讨论】:

    【解决方案2】:

    switch 语句中不需要 switch (dayNum)。 他们将创建嵌套的switch 语句,并在第一个switch 语句中只留下case 0default

    试试这个:

    #include <iostream>
    
    #include <cmath>
    
    #include <string>
    
    #include <cstring>
    using namespace std;
    
        string getDayOfWeek(int dayNum) {
        string dayName;
    
        switch (dayNum) {
        case 0:
            dayName = "Sunday";
            break;
    
        case 1:
            dayName = "Monday";
            break;
    
        case 2:
            dayName = "Tuesday";
            break;
    
        case 3:
            dayName = "Wednesday";
            break;
    
        case 4:
            dayName = "Thursday";
            break;
    
        case 5:
            dayName = "Friday";
            break;
    
        case 6:
            dayName = "Saturday";
            break;
    
        default:
            dayName = "Invalid Day Number";
        } 
    
        return dayName;
    }
    
    int main()
    {
        cout << getDayOfWeek(5);
        return 0;
    }
    

    【讨论】:

      【解决方案3】:

      您错误地使用了switch 语句。代码应如下所示:

      switch(dayNum){
          case 0:
              // do something
              break;
          case 1:
              // do something
              break;
          case 2:
              // do something
              break;
          case 3:
              // do something
              break;
          case 4:
              // do something
              break;
          case 5:
              // do something
              break;
          case 6:
              // do something
              break;
          default:
              // do something
              break;
      }
      

      您不应该一遍又一遍地重复switch 语句;只保留第一个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-06
        • 2010-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 2012-01-23
        相关资源
        最近更新 更多