#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 ++语言的新手。
答案 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