当我因某种原因编译这个小程序时,“printf(”done“)”行没有执行,我无法弄清楚原因。在我的print语句之前最初有一个if块,而且还没有执行。我尝试通过gdb运行它并逐步完成它。它找到了该行,但它没有执行它。我正在尝试使用gcc 4.7.2编译它,我使用gedit 3.4.2作为我的文本编辑器。
这是我用来编译它的命令。
gcc teststuff.c -o test
这是代码
#include <stdio.h>
void testmethod()
{
int sign = 1;
printf("hello\n");
printf("%d\n",sign);
printf("done");
}
main(void)
{
testmethod();
return 0;
}
任何人都有任何想法为什么它会跳过这部分代码?谢谢!
答案 0 :(得分:5)
在最后加上换行符。
printf("done\n");
标准输出通常是行缓冲的,这意味着只有完成一行后,您编写的数据才会刷新到屏幕上(除非您明确刷新它,例如使用fflush()
)。但是,它应该在程序退出时刷新(但不一定是在程序退出之前)。
此外,根据您的shell,如果程序在没有换行符的情况下写入数据,您可能会在输出之上获得命令提示符:
my-computer ~/projects/my-program $ ./a.out
hello
1
donemy-computer ~/projects/my-program $
答案 1 :(得分:2)
这是因为您的程序在Done
行有机会打印到控制台之前完成并结束。
控制台输出通常是缓冲的。字符串"done"
保留在stdout
的缓冲区中,直到刷新流。您可以通过调用fflush(stdout)
或将\n
添加到"done"
字符串的末尾来手动执行此操作。打印行尾字符会导致控制台流将缓冲区清空到屏幕上(除非您设置一个特殊的输出模式,允许缓存\n
直到显式刷新)。