我试图在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
答案 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并重新编译程序应该会有所帮助。