c++ int switch语句总是指向' default '
c++ int switch statement always goes to `default`
我有一个基于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
。确保在每个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;
}
如果不使用break
,则所有后续的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。case 1
周围的大括号只是引入了一个新的作用域,与大小写真正构成的内容无关。所以正确的方法是把break
语句,如果你不想通过其余的情况。
您在默认之前有休息吗?如果没有,那么它就会看起来像在点击默认,因为它会掉下去。
每条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";
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 由于"error C4430: missing type specifier - int assumed. Note: C++ does not support default-int",我现在无法编
- 缺少类型说明符 - 假定为 int.注意 c++ 不支持 default-int
- 错误:C4430:缺少类型说明符-假定为int.注意:C++不支持default-int
- c++default-int中的语法错误
- C++ does not support default-int
- VisualStudio 2010 Express-C++上的RDTSC不支持default-int
- VC++缺少类型说明符-假定为int.注意:C++不支持default-int
- C2143 缺少 '*' 之前的';' 和 C 4430 缺少类型说明符 - 假定为 int。注意 C++ 不支持 default-int
- 错误c4430缺少类型说明符-假定为int.注意:c++不支持default-int生成器
- c++ int switch语句总是指向' default '