c ++ int switch语句总是转到`default`

Posted

技术标签:

【中文标题】c ++ int switch语句总是转到`default`【英文标题】:c++ int switch statement always goes to `default` 【发布时间】:2013-05-16 18:58:59 【问题描述】:

我有一个基于 int 比较的 switch 语句,但由于某种原因,它在真正的比较上一直失败,并跳到默认值。这是我的代码:

string Error(int errorNum, int send=1, int crash=1)

  string errorType;
  switch(errorNum)
  
    case 10:
      errorType = "Port number";
    ...
    default:
      errorType = "Unknown";
  
...

我一直用10 的参数调用它,但是当我这样做时,它失败了。等价的if... else if... else 方法有效,这里也是:

string Error(int errorNum, int send=1, int crash=1)

  string errorType;
  if (errorNum == 10)                 // Normally I'd use braces,
    errorType = "Port number";        // but here, it just clutters
  ...
  else
    errorType = "Unknown";
  ...

【问题讨论】:

您没有错过添加您的breaks,是吗? default 之前有break 吗?如果不是,那么它看起来就像是在命中 default,因为它会掉下来。 【参考方案1】:

在这种情况下,您可能缺少break。确保在每个case 的末尾包含break,否则它将落到下一个。

string Error(int errorNum, int send=1, int crash=1)

  string errorType;
  switch(errorNum)
  
    case 10:
      errorType = "Port number";
      break; // If this is not here it will fall throughto the next case or default

    default:
      errorType = "Unknown";
  
  return errorType;

【讨论】:

好的,60 秒内有 4 个答案。哇。 常见问题通常会得到相当多的快速响应。【参考方案2】:

如果不使用break,那么后面的所有case语句都会在匹配的case之后执行。

因此,在您的情况下,它会同时执行 case 部分并覆盖值 errorType,这给您的印象是它直接跳转到默认情况。


添加有趣的更新...

请注意,在 case 语句周围加上大括号不会有任何区别。事实上,以下代码是有效的 C++ 代码,可以按预期工作:

switch(var)


  
   case 1:
     cout<<"case 1"<<endl;
  
     cout<<"This is also part of case 1"<<endl;

   case 2:
  
     cout<<"case 2 "<<endl;
  


注意大括号没有错位。

这里外部 cout 也是case 1 的一部分。在评估控制表达式var 后,控制将直接跳转到匹配的情况。 case 1 周围的大括号只是引入了一个新的范围,与 case 的真正构成无关。因此,如果您不想解决其余情况,正确的方法是使用 break 语句。

【讨论】:

【参考方案3】:

违约前你有休息吗?如果不是,那么它看起来就像是在达到默认值,因为它会失败。

【讨论】:

【参考方案4】:

每个 case 语句都需要一个 break 子句,否则会落到下一条语句。

例如

   case 10: 
        errorType = "Port number";
        break;
    default: 
        errorType= "Unknown";
        break;

查看http://msdn.microsoft.com/en-us/library/k0t5wee3(v=vs.80).aspx了解更多详情

根据您的情况,从开关中返回字符串可能会更好。 return 语句不会落空

case 10: 
     return "Port number";
default: 
     return "Unknown";

【讨论】:

以上是关于c ++ int switch语句总是转到`default`的主要内容,如果未能解决你的问题,请参考以下文章

c语言中使用switch-case语句时,NULL是其中的一种情况,那么在键盘上如何输入才能转到这种情况?

switch语句的用法?

关于C语言switch语句问题

在 switch 语句中使用 const int 变量

C语言关于SWITCH语句的跳转问题

导致此问题的原因:无法从 switch 语句跳转到此案例标签 [重复]