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 语句不是迭代语句,因此它将打破最小的循环,或者如果您在其中一个循环中则切换。