c - 在 while 循环中使用 continue 后代码不会被执行
问题描述
我使用编译器编写了以下代码,该编译器使用 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 < 3; i++)
视为循环;将continue
跳转到i++
循环控制。
你说你使用 Eclipse 作为你的 IDE。这可能就是为什么根本没有输出出现的原因。它的“终端”对程序来说是一个非终端,所以 I/O 是完全缓冲的(而不是像终端输出那样通常是行缓冲的)。这反过来意味着在缓冲区填满、您调用fflush(stdout)
或程序停止之前不会出现任何输出。这是 Eclipse 的一个已知问题。您可以调用setvbuf()
:setvbuf(stdout, NULL, _IOLBUF, BUFSIZ);
在开头添加一行以确保行缓冲生效。
推荐阅读
- node.js - 如何让 nodejs 重新开始工作?
- docker - SERVICE_STARTUP_FAILED 错误在 docker compose 环境中随机发生
- javascript - 单击Vuejs中的按钮时,如何在选项卡中添加存储在变量中的图像?
- r - 根据命名向量替换列表列中的值
- mysql - 替代 log_bin_trust_function_creators=1 在 RDS 上创建 MySQL 函数?
- java - 淡出闪屏主题
- azure - Azure Front Door(预览版)标准/高级版中的 URL 重写
- android - 从 json 类返回值到另一个类
- sql - 面临填充下一个可用已知值以使用 SQL 替换空值的问题
- excel - 在 Excel (Mac) 中,如何修改图例以包含来自多列的内容