C程序没有按正确的顺序执行

hug*_*ugz 5 c

在我的代码函数中需要一段时间才能执行,比如计算大文件中的单词数.我想向用户显示如下输出:

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;
}
Run Code Online (Sandbox Code Playgroud)

并且计算单词数的函数是:

int number(FILE * dico)
{
    int n=0;
    char mot[20];

    rewind(dico);

    while (fgets(mot, 20, dico) != NULL)
    {
        n+=1;
    }

    return n;
}
Run Code Online (Sandbox Code Playgroud)

执行一个非常大的文件输入功能后,输出似乎没有参加.事实上,等待时间是第一次之前printf("calculating word number ...");,然后当它结束时所有的printf一起完成.

为什么会这样?

Eri*_*ouf 6

您的输出正在缓冲.由于第一次打印时没有行结束,因此它将被stdout缓冲而不显示.如果有足够的字符,它会写入它,或者如果它有一个行结束,或者stdout被刷新或者它被写入一个无缓冲的流(如stderr),它可能会立即出现.

它仍然以正确的顺序执行,但它不是立即显示的东西.