c代码莫名其妙地跳过了行

joe*_*usp 2 c gcc

当我因某种原因编译这个小程序时,"printf("done")"行没有执行,我无法弄清楚原因.在我的print语句之前最初有一个if块,而且还没有执行.我尝试通过gdb运行它并逐步完成它.它找到了该行,但它没有执行它.我正在尝试使用gcc 4.7.2编译它,我使用gedit 3.4.2作为我的文本编辑器.

这是我用来编译它的命令.

gcc teststuff.c -o test
Run Code Online (Sandbox Code Playgroud)

这是代码

#include <stdio.h>

void testmethod()
{

   int sign = 1;
   printf("hello\n");
   printf("%d\n",sign);


   printf("done");
}

main(void)
{
   testmethod();
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

任何人都有任何想法,为什么它跳过代码的这一部分?谢谢!

Die*_*Epp 5

最后放一个换行符.

printf("done\n");
Run Code Online (Sandbox Code Playgroud)

标准输出通常是行缓冲的,这意味着一旦完成一行,您编写的数据就会被刷新到屏幕上(除非您明确刷新它,例如fflush()).但是,它应该在程序退出时刷新(但不一定程序退出之前).

此外,根据您的shell,如果程序在没有换行符的情况下写入数据,您可能会在输出之上获得命令提示符:

my-computer ~/projects/my-program $ ./a.out
hello
1
donemy-computer ~/projects/my-program $
Run Code Online (Sandbox Code Playgroud)