C语言 循环内被if条件包围的Break语句



循环内的break语句(由if语句包围)是否也会从外部if语句中获得控制?我想以一种特定的模式打印一个数组,并遇到了这种情况。当计数超过数组大小时,我想跳出"打印"。一开始,我把break语句放在循环中,也放在它的外部if语句中,它工作得很好。

//printing the pattern
int space=1,spacecount=4,x=2,xcount=1,arrcount=0;
for(i=1;i<=8;i++)
{
if(i==space)
{
printf("  ");
for(j=1;j<=spacecount;j++)
{
printf("%d",arr[arrcount++]);
if(arrcount>=size)
break;
}
if(arrcount>=size)
break;
printf("n ");
for(j=1;j<=spacecount;j++)
{
printf("%d",arr[arrcount++]);
if(arrcount>=size)
break;
}
if(arrcount>=size)
break;
printf("n");
space=space+2;
spacecount--;
}
if(i==x)
{
for(j=1;j<=xcount;j++)
{
printf("%dn",arr[arrcount++]);
if(arrcount>=size)
break;
}
if(arrcount>=size)
break;
x=x+2;
xcount++;
}
if(arrcount>=size)
break;
}

然后我删除了外部if中的break语句,这似乎也给出了相同的结果。

//printing the pattern
int space=1,spacecount=4,x=2,xcount=1,arrcount=0;
for(i=1;i<=8;i++)
{
if(i==space)
{
printf("  ");
for(j=1;j<=spacecount;j++)
{
printf("%d",arr[arrcount++]);
if(arrcount>=size)
break;
}

printf("n ");
for(j=1;j<=spacecount;j++)
{
printf("%d",arr[arrcount++]);
if(arrcount>=size)
break;
}

printf("n");
space=space+2;
spacecount--;
}
if(i==x)
{
for(j=1;j<=xcount;j++)
{
printf("%dn",arr[arrcount++]);
if(arrcount>=size)
break;
}

x=x+2;
xcount++;
}
if(arrcount>=size)
break;
}

但是我一直认为break语句将控制从最近的循环中带出来?我希望你能更清楚地说明这一点。到底发生了什么,为什么会起作用?如有任何帮助,不胜感激。

编辑:好吧,我尝试了更多的输入,它打印超出了我想要的大小。所以我一开始的想法和你们说的都是真的。谢谢你。

从标准:

break语句终止最小的封闭开关或迭代语句的执行。

https://port70.net/前夕/c/c11 n1570.html # 6.8.6.3p2

If语句不是迭代语句,因此它将触发最小循环,或者在其中一个循环中切换。

回答你的问题:

当在循环中遇到break语句时,循环立即终止,程序控制在循环后的下一条语句处恢复。

所以,是的,你认为break语句将控制从最近的循环中取出是正确的。

在你的例子中:

for (j = 1; j <= spacecount; j++) {
printf("%d", arr[arrcount++]);
if (arrcount >= size)
break; // Breaks the inner loop (j)
}
if (arrcount >= size)
break; // Breaks the outer main loop (i)

最新更新