C语言中for循环嵌套,内循环遇到break语句结束本次内循环 ,为什么第三行会直接换行呢?求解

C语言中for循环嵌套,内循环遇到break语句结束本次内循环 ,输出会换行吗?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- a5156520 2023-03-21 18:23关注
因为当i=3,j=1时,n为10,打印一个换行,然后就break跳出了内层循环,n没有++,仍为10;
然后当外层循环开始新一轮循环时,i=4,j=1,进入到内层循环,n=10,n%5还是等于0,加上前面n=10时打印的一个换行,和这次的又一个换行,所以就显示为第三行直接空行了。(可以在第一个if中加个打印语句,观察下i,j,n的值的变化)。
如果要不显示第三行的空行,可以在判断打印换行的if加个条件:i!=3即可;如果第一行数字之前的空行也不要,可以再加个条件:n!=0.
测试代码如下:#include <stdio.h> int main(void){ int i,j,n=0; for(i=1;i<=4;i++){ for(j=1;j<=5;j++,n++){ if(n%5==0&&i!=3&&n!=0){ // 当i==3,j==1时,n=10,此时会打印一个换行,光标跳转到第三行(以显示第一次显示数字的那行为第一行) // printf("i=%d,j=%d,n=%d",i,j,n); printf("\n"); } // 然后break退出了,n没有++,此时n仍等于10, //下次再进入内层循环,i=4,j=1时,前面的if还要打印一个换行 ,此时会光标会跳转到第四行(以显示第一次显示数字的那行为第一行) // 所以,因为这两个换行,而显示出第三行空行了 // 如果要让第三行不空行,可以在上面的if加个条件i!=3 ,如果第一行数字之前的空行也不要,可以再加个条件n!=0 if(i==3&&j==1){ break; } printf("%d\t",i*j); } } return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用