【问题标题】:Why aren't these continue statements working in my loops?为什么这些 continue 语句在我的循环中不起作用?
【发布时间】:2016-01-23 03:17:06
【问题描述】:

我正在尝试将以下 for 循环转换为 while 和 do-while 循环,但由于某种原因,代码在进入实际循环之前就中断了。

这是我要复制的内容:

#include <stdio.h>

int main(void)
{ int y;

  for (y=1;y<10; y++)
  { if (y == 5)
      continue;
    printf("%2d", y);
  }

  printf("\ny=%2d\n",y);

  return 0;
}

以下是我尝试制作等效的 while 和 do-while 循环:

#include <stdio.h>

int main(void)
{
  int y;

  y = 1;
  while(y < 10)  // here's my while loop
    {
      if(y == 5)
        continue;
      printf("%2d", y);
      y++;
    }

  printf("\ny=%2d\n",y);

/********************
... and my do-while
********************/
  y = 1;
  do
    {
      if (y == 5)
        continue;
      printf("%2d", y);
      y++;
    } while(y < 10);

  printf("\ny=%2d\n",y);

  return 0;
}

我哪里做错了?

【问题讨论】:

  • 您想学习如何使用调试器,这样您就可以逐步跟踪您的代码,检查所有相关变量的值以及它们如何变化。

标签: c while-loop do-while continue


【解决方案1】:

for 循环中,continue 跳转到for 语句的第三个表达式,该表达式使计数器递增。

while 循环中,continue 立即跳转到下一次迭代,跳过增量。

【讨论】:

    【解决方案2】:

    如果在您的代码中满足条件,您不会增加变量,因此您会陷入无限循环。试试

    #include <stdio.h>
    
    int main(void)
    {
      int y;
    
      y = 0;
      while(++y < 10)  // here's my while loop
        {
          if(y == 5)
            continue;
          printf("%2d", y);
        }
    
      printf("\ny=%2d\n",y);
    

    或类似的。

    【讨论】:

    • 你需要去掉y++
    • 为了防止这种错误,OP可以使用for循环来代替
    • @Jackson:糟糕,已修复!
    • 虽然正确,但我觉得这个y = 0; while(++y &lt; 10) 比必要的更复杂,虽然更容易出错。我更喜欢y = 1; while(y &lt; 10) { ++y;
    • @alk:是的,给猫剥皮的方法很多。
    猜你喜欢
    • 2012-11-06
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 2020-11-28
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多