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

时间:2018-02-28 22:26:06

标签: c++

#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语句不为true,因此打印*。这个循环结束导致c = 1以及更大的循环,其中r now = 1.主循环开始再次满足所有条件但是由于某种原因仍然从内循环打印* *即使if命令指示中断也是调用。

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

任何帮助都表示赞赏,好像它还不清楚我仍然是C ++语言的新手。

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

如果您重构逻辑,您会发现内循环等同于:

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

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

答案 2 :(得分:0)

break字面上突破了最内层的for循环。

它退出循环,代码继续,好像循环结束了。

答案 3 :(得分:0)

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

如果没有执行cout<<endl;,您的输出将如下所示:

***

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

#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