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

c代码莫名其妙地跳过了几行,c,gcc,C,Gcc,当我出于某种原因编译这个小程序时,“printf(“done”)”行没有执行,我不知道为什么。在我的print语句之前最初有一个if块,并且该块也没有执行。我试着通过gdb运行它,并逐步通过它。它找到了行,但没有执行它。我正在尝试使用GCC4.7.2编译它,并使用GEDIT3.4.2作为我的文本编辑器 这是我用来编译它的命令 gcc teststuff.c -o test 这是代码 #include <stdio.h> void testmethod() { int si

当我出于某种原因编译这个小程序时,“printf(“done”)”行没有执行,我不知道为什么。在我的print语句之前最初有一个if块,并且该块也没有执行。我试着通过gdb运行它,并逐步通过它。它找到了行,但没有执行它。我正在尝试使用GCC4.7.2编译它,并使用GEDIT3.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;
}
#包括
void testmethod()
{
int符号=1;
printf(“hello\n”);
printf(“%d\n”,符号);
printf(“完成”);
}
主(空)
{
testmethod();
返回0;
}

有人知道为什么它会跳过这部分代码吗?谢谢

在末尾放一个换行符

printf("done\n");
标准输出通常是行缓冲的,这意味着您写入的数据只有在完成一行后才会刷新到屏幕上(除非您显式地刷新它,例如使用
fflush()
)。但是,它应该在程序退出时刷新(但不一定在程序退出之前)

此外,根据shell的不同,如果程序写入数据时没有换行符,则可能会在输出的顶部出现命令提示符:

my-computer ~/projects/my-program $ ./a.out
hello
1
donemy-computer ~/projects/my-program $

这是因为程序在
Done
行有机会打印到控制台之前完成并结束


控制台输出通常是缓冲的。字符串
“done”
将保留在
stdout
的缓冲区中,直到流被刷新。您可以通过调用
fflush(stdout)
或在
“done”
字符串末尾添加
\n
来手动执行此操作。打印行尾字符会导致控制台流在屏幕上清空缓冲区(除非您设置了特殊的输出模式,允许缓冲
\n
,直到显式刷新)。

您是否尝试过
printf(“完成”\n”)?这也解释了我的if语句,因为它们里面只有print语句,而且也没有换行符。