具有交换语句的C++逻辑 我开始掌握C++,但有一件事让我困惑,它是使用Stand和Sead实例。我知道怎么做,但我想了解的是为什么会发生这种特定的操作
说如果我有具有交换语句的C++逻辑 我开始掌握C++,但有一件事让我困惑,它是使用Stand和Sead实例。我知道怎么做,但我想了解的是为什么会发生这种特定的操作,c++,select,case,break,C++,Select,Case,Break,说如果我有 switch (Tasty) { case true: cout << "yum" << endl; break; case false: cout << "erch" << endl; break; } 现在它正确地打印出我想要的,但是如果我这样做了 switch (Tasty) { case true: cout << "yum" << endl; cas
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?switch语句中的大小写最好被认为是标签。声明之后
cout << "yum" << endl;
跑完,下一个就开始跑
cout << "erch" << endl;
除非明确中断switch语句。如果不使用break关键字,程序将继续执行以下指令。有时候这很方便,但大多数时候这只是一个麻烦
在你的情况下,如果Tasty是真的,两个单词都会被打印出来。如果为false,则仅显示第二个 除非您特别希望开关进入其他情况,否则开关的大多数情况下都需要中断。 无论是否中断,开关逐行向下移动。 有些语言(如C)会自动捕获这些信息并阻止编译。C++会让你发号施令,所以你需要小心地加入那些。p>
switch(Tasty)
{
case true:
cout << "yum" ;
break; /*<--- don't forget the break!*/
case false:
cout << "not yum";
break;
}
在switch语句中,情况一直执行到一个为真,然后下一个也在执行,除非您断开开关或直到所有条件都已测试
请检查此示例:
int Tasty = 1;
switch (Tasty)
{
case 1:
qDebug() << "yum" << endl;
case 2:
qDebug() << "erch" << endl;
}
输出:
好吃
埃尔赫
输出:
埃尔赫
根据Cplusplus.com 它的工作方式如下:switch计算表达式并检查它是否等价于constant1;如果是,则执行group-of-statements-1,直到找到break语句。当它找到这个break语句时,程序跳转到整个switch语句的末尾,即右大括号 所以,若你们并没有放入break语句,它将自动转到下一个案例,它将继续运行,直到找到break语句。请点击此链接了解更多信息
这里的答案很好,我只想给你一个例子,省略break实际上很有用: 在这种情况下,您无法检查多个值,如1 | | 2 | | 3,因此如果您想对多个值执行相同的函数,您可以选择重复代码,如下所示:
switch (a)
{
case 1:
Foo();
break;
case 2:
Foo();
break;
case 3:
Foo();
break;
case 4:
Bar();
break;
}
除非你省略了中断,你可以写:
switch (a)
{
case 1:
case 2:
case 3:
Foo();
break;
case 4:
Bar();
break;
}
如果可能的话,代码重复总是要避免的,所以这实际上很方便。不间断地,它将进入下一个案例。请阅读前面的答案。注意,对于布尔值,使用IFASTY更有意义。。。其他的在你的情况下是这样的{cout另一个选项是std::cout@fredrarson我假设发布的代码是一个简化的代码,因此他对一个通用的解决方案感兴趣。当然,你的也值得一提。中断并不总是需要的,它发生在你不想中断的某些情况下。确实,在99%的情况下,你会在那里中断因为这是你想要做的,但这不是一条规则。我知道。但在这种情况下,OP永远不会忘记中断。它被称为故障排除,并且确实会一直导致错误,我从未见过使用没有中断的switch语句是有用的。但我想在某些情况下,它可能会防止代码重复。
switch (a)
{
case 1:
case 2:
case 3:
Foo();
break;
case 4:
Bar();
break;
}