【问题标题】:Code doesn't get excuted after using continue in while loop在 while 循环中使用 continue 后代码不会被执行
【发布时间】:2019-06-28 15:54:39
【问题描述】:

我使用编译器编写了以下代码,该编译器使用 eclipse 配置为适合 c89 标准。

#include <stdio.h>

int main(void) {
    int i=0;
    printf("initial value for variable i is: %d\n",i);
    while (i<3)
    {
        if (i==1) {continue;}
        printf("%d\n",i);
        i++;
    }
    return 0;
}

问题是代码没有被执行(根本没有错误)并且控制台中没有任何显示。删除以下代码行时 if (i==1) {continue;} 一切正常。

【问题讨论】:

  • 当i 是1 时,它的值没有改变,所以在下一次迭代时它仍然是1,并且……它需要很长时间从1 更改。 for 循环的一个优点是它捆绑了控件——您不会看到将for (i = 0; i &lt; 3; i++) 作为循环的问题。 continue 将跳转到循环控制中的 i++。
  • @JonathanLeffler 是的,你可以发布它作为接受它的答案
  • @JonathanLeffler 只是在while循环中使用 continue 时发生了一些奇怪的事情,代码会在不检查条件的情况下继续运行吗?!
  • 它检查每次迭代的条件,但i 中的值保持在1,因为continue 跳过了i++; 行。所以条件永远不会改变;程序不会停止。这可能就是为什么没有输出出现的原因——你说你使用 Eclipse 作为你的 IDE,它的“终端”对程序来说是一个非终端,所以 I/O 是完全缓冲的,在缓冲区填满之前没有输出出现,你调用fflush(stdout),或者程序确实停止。

标签: c loops while-loop continue c89


【解决方案1】:

当i 是1 时,它的值没有改变,所以在下一次迭代时它仍然是1,并且……从1 改变需要很长时间.

for 循环的一个优点是它将循环控件捆绑在一行中。你不会看到for (i = 0; i &lt; 3; i++) 作为循环的问题; continue 将跳转到循环控制中的 i++。

您说您使用 Eclipse 作为您的 IDE。这可能就是为什么根本没有输出出现的原因。它的“终端”对程序来说是一个非终端,所以 I/O 是完全缓冲的(而不是像终端输出那样通常是行缓冲的)。这反过来意味着在缓冲区填满之前不会出现任何输出,您调用fflush(stdout),或者程序确实停止了。这是 Eclipse 的一个已知问题。您可以调用setvbuf():在开头添加一行setvbuf(stdout, NULL, _IOLBUF, BUFSIZ);,以确保行缓冲生效。

【讨论】:

    猜你喜欢
    • 2018-07-31
    • 1970-01-01
    • 2012-07-01
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 2013-01-01
    相关资源
    最近更新 更多