对在这个嵌套循环中使用中断感到困惑
Confused about the use of break in this nested loop
#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
相关文章:
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 了解嵌套循环打印星号图案
- 无法掌握嵌套循环的写作技巧
- 在 c++ 中实现嵌套循环的更短方法吗?
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 毕达哥拉斯三重嵌套循环误解
- T(n) 表示嵌套循环
- 2 个嵌套循环的时间复杂度
- 嵌套循环背后的逻辑
- 使用 %s C++嵌套循环
- 嵌套循环和重复迭代器
- 如何在 c++ 下使用嵌套循环和正则表达式降低时间复杂度?
- C++在乘法图中放置随机值(嵌套循环)
- 如何使用 OpenMP 减少嵌套循环?
- 为什么使用 2 个嵌套循环 O(n^2) 复杂度来解决二和问题,当只改变循环计数器逻辑时运行得更快?
- 学习嵌套循环C++与示例混淆
- 如何在CUDA中嵌套循环
- 如何避免使用 goto 并有效地中断嵌套循环
- 对在这个嵌套循环中使用中断感到困惑
- 删除与另一个成员相等的链表成员的嵌套循环中断.将问题隔离到一行