对在这个嵌套循环中使用中断感到困惑

Confused about the use of break in this nested loop

本文关键字:中断 嵌套循环      更新时间:2023-10-16
#include <iostream>
using namespace std;
int main()
{
 for(int r = 0; r<3; r++)
    {
       for(int c = 0; c<=r; c++)
       {
         if(c == 1)
           break;
         cout<<'*';
       }
     cout<<endl;
     }
 return 0;
} 

此代码输出:

*
*
*

我的问题是为什么它不输出:

*
*

我的逻辑是第一个循环以r = 0运行。然后调用内部循环,其中 c = 0。第一个 if 语句不为真,因此打印 *。此循环结束导致 c = 1 以及现在 = 1 的较大循环。主循环再次开始,满足所有条件,但由于某种原因,即使 if 命令指示调用中断,仍然从内部循环打印 *。

我可能的想法是:1. if 语句周围没有括号?2.休息;由于某种原因没有中断循环,而是 if 语句(idk 为什么会这样(3. 魔术?

任何帮助都值得赞赏,好像还不清楚我对C++语言仍然非常陌生。

break只突破最内层的循环,而不是所有的循环。所以输出是这样生成的:

* // r = 0, c = 0
* // r = 1, c = 0
* // r = 2, c = 0

如果你重构逻辑,你会发现你的内部循环等价于:

for(int c = 0; c < 1 ; c++)
       {
         cout<<'*';
       }

现在,外循环将迭代 3 次 R->{0,1,2( .. 对于所有 R,您的循环有机会迭代,并且只有 1 次迭代。因此,您可以获得三个*打印。

break实际上突破了最内在的for循环。

退出它所在的循环,代码继续,就好像循环已经完成一样。

break指令将中断该线路上的当前for循环。因此,程序将从该块之后的下一条指令继续执行,即cout<<endl;

如果未执行cout<<endl;,则输出将如下所示:

***

要获取空行,您需要在break指令之前添加另一个cout<<endl;,如下所示:

#include <iostream>
using namespace std;
int main() {
    for(int r = 0; r<3; r++) {
        for(int c = 0; c<=r; c++) {
            if(c == 1) {
                cout<<endl;
                break;
            }
            cout<<'*';
        }
        cout<<endl;
    }
return 0;
} 

此代码将打印以下内容:

* // r = 0, c = 0
  // new line
* // r = 1, c = 0
  // new line
* // r = 2, c = 0
  // new line