C++ 对在这个嵌套循环中使用break感到困惑吗

C++ 对在这个嵌套循环中使用break感到困惑吗,c++,C++,我的问题是为什么它不输出: * * * 我的逻辑是第一个循环以r=0运行。然后调用c=0的内部循环。第一条if语句为非真,因此打印了*。这个循环结束后,c=1,以及r现在=1的更大循环。主循环再次开始满足所有条件,但由于某种原因,即使if命令指示调用中断,仍会从内部循环打印一个* 我可能的想法是: 1.if语句周围没有括号? 2.打破出于某种原因,它不会中断循环,而是中断if语句(idk为什么会这样) 3.魔法 任何帮助都被理解为,它似乎还不清楚,我对C++语言还是很新手。 破解< /C> >

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

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

我可能的想法是: 1.if语句周围没有括号? 2.打破出于某种原因,它不会中断循环,而是中断if语句(idk为什么会这样) 3.魔法


任何帮助都被理解为,它似乎还不清楚,我对C++语言还是很新手。

<代码>破解< /C> >从<最里面的<代码> > Roo.


它退出它所在的循环,代码继续运行,就像循环结束一样。

break
仅从最里面的循环中断,而不是从所有循环中断。因此,输出是这样生成的:

*

*

break
指令将中断该行的当前
for
循环。因此,程序将从该块之后的下一条指令继续执行,即
cout如果重新构造逻辑,您将发现您的内部循环等效于:

* // r = 0, c = 0
  // new line
* // r = 1, c = 0
  // new line
* // r = 2, c = 0
  // new line
for(int c=0;c<1;c++)
{

coutOn外循环
c
的每次迭代都会再次初始化为
0
(因为整个内循环会再次启动)使用调试器单步执行代码将向您展示它是如何工作的。此外,只需浏览纸上的逻辑将向您展示为什么它总是打印。但是为什么它没有执行
coutIt,这就是为什么
*
在单独的行上。
* // r = 0, c = 0
* // r = 1, c = 0
* // r = 2, c = 0
***
#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
for(int c = 0; c < 1 ; c++)
       {
         cout<<'*';
       }