具有交换语句的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;
}