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";
...
【问题讨论】:
您没有错过添加您的break
s,是吗?
在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`的主要内容,如果未能解决你的问题,请参考以下文章