我开始掌握c ++,但有一件事让我感到困惑,它使用了break和select case。我知道如何做到这一点,但我想了解的是为什么会发生这种特定的操作。
说我有没有
switch (Tasty)
{
case true:
cout << "yum" << endl;
break;
case false:
cout << "erch" << endl;
break;
}
现在这样做是正确的并打印出我想要的东西,但如果我这样做
switch (Tasty)
{
case true:
cout << "yum" << endl;
case false:
cout << "erch" << endl;
}
为什么打印“yum”和“erch”?
答案 0 :(得分:8)
switch语句中的情况最好被认为是标签。声明后
cout << "yum" << endl;
完成运行,下一个开始运行,
cout << "erch" << endl;
除非您在break
声明中明确switch
。
答案 1 :(得分:5)
这里的答案很好,我只想举个例子,省略break
实际上很有用:
在case
中,您无法检查多个值,例如1 || 2 || 3
,因此如果您想为多个值执行相同的功能,您可以选择重复代码,例如这样:
switch (a)
{
case 1:
Foo();
break;
case 2:
Foo();
break;
case 3:
Foo();
break;
case 4:
Bar();
break;
}
除非你省略break
,否则你可以写:
switch (a)
{
case 1:
case 2:
case 3:
Foo();
break;
case 4:
Bar();
break;
}
如果可能的话,代码重复总是要避免,所以这实际上很方便。
答案 2 :(得分:2)
如果您不使用break
关键字,程序将继续执行以下说明。有时这会派上用场,但大多数时候这只是屁股的痛苦。
在您的情况下,如果Tasty
为true
,则会打印两个字。如果是false
,则只有第二个。
答案 3 :(得分:1)
在交换机* 的大多数情况下需要中断,除非您特别希望交换机进入其他情况。 无论是否断裂,开关都逐行向下移动。 像C#这样的语言会自动捕获这些并阻止编译。但是C ++会让你做主,所以你需要小心添加它们。
switch(Tasty)
{
case true:
cout << "yum" ;
break; /*<--- don't forget the break!*/
case false:
cout << "not yum";
break;
}
答案 4 :(得分:1)
在switch
语句中执行的情况直到一个true
(然后下一个正在执行,除非break
来自switch
)或直到所有条件都已经过测试
检查这个例子:
int Tasty = 1;
switch (Tasty)
{
case 1:
qDebug() << "yum" << endl;
case 2:
qDebug() << "erch" << endl;
}
输出:
荫
erch
int Tasty = 1;
switch (Tasty)
{
case 2:
qDebug() << "yum" << endl;
case 1:
qDebug() << "erch" << endl;
}
输出:
erch
答案 5 :(得分:0)
根据Cplusplus.com &#34; 它按以下方式工作:switch计算表达式并检查它是否等于constant1;如果是,则执行group-of-statements-1直到找到break语句。当它找到这个break语句时,程序跳转到整个switch语句的结尾(结束括号)。&#34;
所以,如果你没有提供break语句,它会自动转到下一个案例,它会继续运行直到找到break语句。请点击此链接获取更多信息。