【问题标题】:printf() not working before do while loopprintf() 在执行 while 循环之前不工作
【发布时间】:2021-07-01 21:52:15
【问题描述】:

我试图运行这段代码:

printf("Enter a character.");
printf("\n");

do {
    ch = getch();
    system("cls");
    putchar(ch);
} while(ch != '.');

上述代码在 Codeblocks 上运行良好,但在 Eclipse IDE 上无法运行。事实上,do while 循环之前的 printf 语句不起作用,但如果我禁用 do while 语句,printf 语句在 eclipse 上工作正常。你能解释一下为什么会这样吗?

【问题讨论】:

  • 尝试在循环前添加fflush(stdout)
  • 在 Eclipse 下运行的程序不一定与直接从命令行运行程序的行为相同,因为标准 I/O 通道通常不被视为“交互式设备”(终端),因此输出变为完全缓冲,并且在从标准输入输入之前不会自动刷新标准输出(无论如何,C 标准都不能保证,尽管当输出设备是终端时,大多数实现会在读取标准输入之前刷新标准输出)。

标签: c eclipse codeblocks


【解决方案1】:

也许试试这个?

printf("Enter a character.\n");
fflush(stdout);

do {
    ch = getch();
    system("cls");
    putchar(ch);
} while(ch != '.');

我认为这是因为您的输出缓冲区 (printf) 未刷新。

【讨论】:

  • 是什么让某些 IDES 无需编写 fflush(代码块)即可刷新输出缓冲区,而其他 IDES 则需要手动添加 fflush(eclipse)?
  • 我认为从高级/低级语言到机器语言的代码翻译因编译器而异
  • 抱歉,编译器是指IDE,对吗?因为我认为代码块和 eclipse 都使用 gcc 作为编译器。这就是为什么我感到困惑的是,在一个 IDE 中,您不需要放置 fflush,而在另一个 IDE 中则需要。
  • 与运行程序的“终端窗口”有关。
猜你喜欢
  • 1970-01-01
  • 2019-09-03
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多