我的代码函数中需要一段时间才能执行,比如计算大文件中的单词数。我想向用户显示如下输出:
calculating word number ...
执行该功能,然后打印:calculating word number ... OK
要做到这一点,我的主要是:
int main(int argc, char * argv[])
{
int number_of_words;
FILE * dico = NULL;
dico = fopen(argv[1],"r+");
printf("calculating word number ...");
number_of_words = number(dico);
printf("OK\n");
return 3.14;
}
计算单词数的函数是:
int number(FILE * dico)
{
int n=0;
char mot[20];
rewind(dico);
while (fgets(mot, 20, dico) != NULL)
{
n+=1;
}
return n;
}
执行一个非常大的输入文件的函数后,输出似乎没有参加。事实上,等待时间是之前第一个printf("calculating word number ...");
,然后当它结束时,所有printf
都会一起完成。
为什么会这样?
答案 0 :(得分:6)
您的输出正在缓冲。由于第一次打印时没有行结束,因此它将被stdout缓冲而不显示。如果有足够的字符,它会写入它,或者如果它有一个行结束,或者stdout被刷新或者它被写入一个无缓冲的流(如stderr),它可能会立即出现。
它仍然按照正确的顺序执行,但它不会立即显示。