C命令在eclipse中一次执行

时间:2014-09-16 19:00:13

标签: c

我试图在eclipse中运行一个简单的C程序,程序会向用户输出一个问题,提示用户输入一个数字。然后程序应该将该号码输出回用户。

#include <stdio.h>
#include <stdlib.h>
    int main()
    {
        /*Can machines ever live?*/
        printf("Hello There. \n"  );
/* why is this not printing
 *  */
        int num;
        printf("enter a number: \n");
        scanf("%d", &num );
        printf("you have entered %d", num);
        getchar();
        return 0;
    }

问题是当我运行程序时,程序运行时没有输出给我。如果我运行代码,那么所有输出都会立即提供给我(提示和输出的打印都带有数字。)输出最终看起来像这样:

7
你好。
输入一个数字:
你输入了7

2 个答案:

答案 0 :(得分:0)

ISO C标准规定stdout可以完全缓冲(与线路缓冲相反),如果输出设备可以明确地确定为不是交互式的(参见C11 7.21.3 Files /3 }和/7了解详情。)

完全缓冲的流不关心换行符,它会愉快地缓冲所有数据,直到缓冲区(例如,4K数据)已满或流已关闭。

这通常用于提高效率,因为冲洗缓冲液通常相对昂贵。为交互式I / O完成的原因是您通常希望用户立即接收信息。

可能是您在 IDE中运行代码并且它将其检测为非交互式设备。

要解决此问题,您可以在每个printf之后使用以下内容刷新标准输出:

fflush (stdout);

或者您可以在程序开始时将其更改为行缓冲,但我相信,对此的支持依赖于实现):

setvbuf (stdout, NULL, _IOLBF, BUFSIZ);

答案 1 :(得分:0)

以paxidiablo答案为基础:
如果您使用典型的编译器运行Eclipse,我假设the output device can be definitively determined to not be interactive。因此,不会假设您所看到的是:stdout fully buffered 我认为更可能的原因是由于某些原因(这可能是Eclipse中的错误或您的遗漏),您运行的可执行代码不是编译您看到的源代码的结果,而是其先前版本之一。
我相信重新启动Eclipse并重新编译程序应该会有所帮助。