Break 循环内的语句,由 if 条件包围
Break statement inside a loop which is enclosed by if condition
循环内的break 语句是否也能摆脱外部if 语句的控制?我想以特定模式打印数组并遇到这种情况。当计数超过数组大小时,我想跳出 'printing'。最初我将 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("%d\n",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("%d\n",arr[arrcount++]);
if(arrcount>=size)
break;
}
x=x+2;
xcount++;
}
if(arrcount>=size)
break;
}
但我一直认为 break 语句只是将控制从最近的循环中带出来?我很想对此有更多的了解。到底发生了什么,为什么它起作用了?感谢任何帮助。
编辑:好的,我尝试了更多的输入,但打印出来的尺寸超出了我想要的尺寸。所以我最初的想法和你们所说的都是真的。谢谢。
正在回答您的问题:
当在循环内遇到 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)
来自标准:
A break statement terminates execution of the smallest enclosing switch or iteration statement.
https://port70.net/~nsz/c/c11/n1570.html#6.8.6.3p2
If 语句不是迭代语句,因此它将打破最小的循环,或者如果您在其中一个循环中则切换。
循环内的break 语句是否也能摆脱外部if 语句的控制?我想以特定模式打印数组并遇到这种情况。当计数超过数组大小时,我想跳出 'printing'。最初我将 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("%d\n",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("%d\n",arr[arrcount++]);
if(arrcount>=size)
break;
}
x=x+2;
xcount++;
}
if(arrcount>=size)
break;
}
但我一直认为 break 语句只是将控制从最近的循环中带出来?我很想对此有更多的了解。到底发生了什么,为什么它起作用了?感谢任何帮助。
编辑:好的,我尝试了更多的输入,但打印出来的尺寸超出了我想要的尺寸。所以我最初的想法和你们所说的都是真的。谢谢。
正在回答您的问题:
当在循环内遇到 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)
来自标准:
A break statement terminates execution of the smallest enclosing switch or iteration statement.
https://port70.net/~nsz/c/c11/n1570.html#6.8.6.3p2
If 语句不是迭代语句,因此它将打破最小的循环,或者如果您在其中一个循环中则切换。