【问题标题】:Break condition in iteration [duplicate]迭代中的中断条件[重复]
【发布时间】:2017-08-15 12:05:08
【问题描述】:

下面是我写的插入排序代码

#include<stdio.h>
#include<conio.h>
void main()
{
    int i, j, a[10], temp, f = 0, k = 0;
    clrscr();
    printf("\n\t\t\t\tINSERTION SORT\nEnter the Array:-\n");
    for (i = 0; i <= 9; i++)
        scanf("%d", &a[i]);
    for (i = 0; i <= 9; i++)                  // 1st for loop
    {
        temp = a[i];
        for (j = 0; j <= i - 1; j++)               // 2nd  for loop
        {
            f = 0;
            if (a[i]<a[j])                      //  if loop
            {
                for (k = i - 1; k >= j; k--)            //   3rd for loop
                    a[k + 1] = a[k];
                a[k + 1] = temp;
                break;                              // break statement
            }
        }
    }
    printf("\nThe sorted array is:-\n");
    for (i = 0; i <= 9; i++)
        printf("%d\n", a[i]);
    getch();
}

有人告诉我,break 语句会停止那个特定的瞬间(nth 当前正在运行的最内层循环的时间并启动它的下一个实例(n+1 time)。所以在这里我很困惑,这里的 break 语句是否会停止第三个循环或 if 条件。但是我被告知它会影响第二个循环。

这里有人可以告诉我它将在哪个 for 循环上产生效果。

【问题讨论】:

  • 您被告知的内容符合continue 声明。 "if loop" 也不是一回事。
  • Ewww conio...
  • 首先format 那个烂摊子。完全看不懂。
  • 您被告知的内容符合continue 声明。 break 语句刚刚退出循环(在您的情况下是第二个 for 循环)。

标签: c for-loop iteration break control-flow


【解决方案1】:

break 将停止循环,而不是 if 语句。

所以这里:

for (i = 0; i <= 9; i++)                 // 1st for loop
{
    temp = a[i];
    for (j = 0; j <= i - 1; j++)         // 2nd  for loop
    {
        f = 0;
        if (a[i]<a[j])                   //  if STATEMENT
        {
            for (k = i - 1; k >= j; k--) //   3rd for loop
                a[k + 1] = a[k];
            a[k + 1] = temp;
            break;                      // break statement
        }
    }
}

,假设i 的值为0,当break 被执行时,它将阻止第二个循环再次执行,您将退出该循环。结果,您将再次进入第一个循环,新的迭代将在此开始,i 等于 1。

您所描述的暗示了 continue 关键字,它再次只与循环有关,它不会直接影响 if 语句。

在上面的代码中,如果使用continue 语句而不是break 语句,那么您将跳过该迭代(意味着不会执行低于continue 的任何内容),并继续进行第二个循环的下一次迭代(将j 增加一个值)。但是,在您的代码中,该行下方没有任何内容,因此不会有任何区别。


PS:

这条评论是错误的:

if (a[i]<a[j])  //  if loop  <-- WRONG

if 语句不是循环。

【讨论】:

  • 实际上我不明白对continue 的引用来自哪里(我的意思是我看到了评论,但我不明白)。
  • @tobi303 来自 OP 代码的代码结构。这将离开if 的块,因为在if 块之后周围的for 块中没有其他语句。
  • 嗯@tobi303 在这里可能有一点。这可能会使 OP 感到困惑,我应该从答案中删除 continue 部分吗?
  • 我至少要解释一下 continue 的作用,因为通常它不会“打破” if 块。
  • 是的,但我认为现在添加了解释,它不应该令人困惑(实际上比我发现的欺骗提供了一些附加值;))
猜你喜欢
  • 2023-03-23
  • 2017-03-10
  • 2020-09-30
  • 2012-10-31
  • 2016-07-15
  • 2012-03-23
  • 2020-04-11
  • 2020-12-12
  • 2014-09-02
相关资源
最近更新 更多