【问题标题】:Scan statements executed before print打印前执行的扫描语句
【发布时间】:2013-10-17 12:05:07
【问题描述】:

我有这个代码。

#include <stdio.h>
int main(void)
{
     int dogs;
     printf("How many dogs do you have?\n");
     scanf("%d", &dogs);
     printf("So you have %d dog(s)!\n", dogs);
     return 0;
}

据我所知,在执行时,程序会说“你有多少只狗”,然后我输入一个数字。相反,我得到一个空白页,我必须先输入一个数字。然后我得到

你有几只狗? 所以你有3条狗! (如果我输入 3)

我正在使用 Eclipse + MinGW,这是我第一次使用 C,所以我不确定我必须/必须设置什么。

【问题讨论】:

  • 我会说您在使用 Eclipse 时遇到了问题。 See it live.
  • 我也会这么说。它在 CodeBlocks 上运行良好。不知道我有什么。
  • 出于好奇,如果您尝试在第一个 printfscanf 之间刷新 stdout,Eclipse 和 MinGW 是否仍然失败?
  • 确实是Eclipse的问题。我进行了研究,显然,您可以下载一个插件来修复它。你可以在这里找到它 (bugs.eclipse.org/bugs/show_bug.cgi?id=173732)
  • @The__Malteser 如果您发布带有该链接的答案和 Eclipse 错误的摘要,我会投赞成票。

标签: c eclipse printf scanf


【解决方案1】:

我设法解决了这个问题。问题是eclipse首先处理所有的扫描语句,然后处理所有的打印语句。如果您的程序有多个扫描语句,这将很难解决。

修复有点简单。从following link 下载二进制修复。

然后您需要将 starter.exe 粘贴到安装 Eclipse 的路径中。

在我的例子中是这个 eclipse\plugins\org.eclipse.cdt.core.win32.x86_64_5.2.0.201309180223\os\win32\x86_64

你的可能会很多。覆盖现有的 starter.exe,它应该可以工作。

【讨论】:

    【解决方案2】:

    printf() 缓冲输出。通常(在 UNIX 中)stdlib 足够聪明,可以在读取 stdin 之前刷新 stdout,但在 MingW 中可能并非如此。考虑使用fflush() 或输出到stderr。

    【讨论】:

    • \n 需要刷新输出缓冲区,这不符合要求。上面发布的链接表明fflush(stdout) 在这里确实有效,但这绝对是编译器实际上出错的极少数情况之一。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多