【问题标题】:Break statement inside a loop which is enclosed by if condition由 if 条件包围的循环内的 Break 语句
【发布时间】:2021-08-11 06:34:03
【问题描述】:

循环中的 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("%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 语句将控制权从最近的循环中带出来?我希望对此有更清楚的了解。到底发生了什么,为什么会奏效?任何帮助表示赞赏。

编辑:好的,我尝试了更多输入,但打印的尺寸超出了我想要的尺寸。所以我最初的想法和你们所说的都是真的。谢谢。

【问题讨论】:

  • 只有封闭循环(或case 块)。
  • 你需要认真地修正你的编码风格,并采用一种一致、通用的风格。您的缩进和大括号位置到处都是,使代码难以阅读。
  • 伦丁写的。请修正缩进。这读起来很混乱。
  • “我现在应该删除帖子吗?” - 不,尽管如此,但在评论部分而不是帖子中提出这些问题。请修正您的代码的缩进。
  • 我对可怜的意图不好。会修复它。 “请在评论部分提出此类问题”注意

标签: c loops if-statement break


【解决方案1】:

来自标准:

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

https://port70.net/~nsz/c/c11/n1570.html#6.8.6.3p2

If 语句不是迭代语句,所以它会打破最小的循环,或者如果你在其中一个循环中,则切换。

【讨论】:

    【解决方案2】:

    回答你的问题:

    当在循环中遇到 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      • 2021-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多