2015-05-19 3 views
4

В моих кодовых функциях есть время, которое требуется выполнить, например, вычисление количества слов в больших файлах. Я хочу, чтобы показать пользователю вывод так:Программа C не выполняется в правильном порядке

calculating word number ...

Execute функцию затем печати: 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 выполнены вместе.

Почему это происходит?

+2

Возможный дубликат [Почему printf не сбрасывается после вызова, если в строке формата не указана новая строка?] (Http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after- the-call-except-a-newline-in-the-format-strin) – dbarnes

+1

Добро пожаловать в разницу между буферизованным и небуферизованным вводом-выводом. –

ответ

5

Ваш выход буферизуется. Поскольку на первой печати не заканчивается строка, она буферизуется с помощью stdout и не отображается. Если бы было достаточно символов, он написал бы это, или если бы у него закончилась строка, или stdout был покраснели или он был записан в небуферизованный поток (например, stderr), он, вероятно, сразу появится.

Он все еще выполняется в правильном порядке, но он просто не отображает вещи сразу.

+0

Я использовал fflush (stdout) перед выполнением функции, и теперь она отлично работает! Большое спасибо !! – hugz

Смежные вопросы