printf незадолго до задержки не работает в C - PullRequest
5 голосов
/ 07 октября 2009

Кто-нибудь знает, почему, если я помещаю printf непосредственно перед задержкой, он ждет, пока задержка не закончится, прежде чем он напечатает сообщение de?

Код1 со сном ():

int main (void)
{
    printf ("hi world");
    system("sleep 3");    
}

Code2 с собственной задержкой:

void delay(float sec)
{
    time_t start;
    time_t current;
    time(&start);
    do{
        time(&current);
    }while(difftime(current,start) < sec);
}
int main (void)
{
    printf ("hi world");
    delay(3);    
}

А если:

printf ("hi world");
delay(3);    
printf ("hi world");
delay(3);    

ожидает, пока сумма не уснет, а затем печатает сообщения одновременно

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

ОБНОВЛЕНИЕ: Я написал задержку («сон 3»), когда я вызвал задержку, я имел в виду задержку (3). Исправлено

Ответы [ 5 ]

20 голосов
/ 07 октября 2009

printf буферизует его вывод до вывода новой строки.

Добавить fflush (стандартный вывод); очистить буферы по требованию.

10 голосов
/ 07 октября 2009

стандартный вывод не сбрасывается до тех пор, пока вы не выведете символ '\ n'.

попробуйте printf ("привет, мир \ n");

8 голосов
/ 07 октября 2009

Обычно стандартный вывод буферизируется до тех пор, пока вы не выполните:

  • вывод \n символа
  • Звоните fflush(stdout)

Сделайте одну из этих вещей перед тем, как позвонить delay(), и вы должны увидеть свой вывод.

1 голос
/ 07 октября 2009

Когда вы вызываете printf, вы ничего не печатаете до тех пор, пока это действительно не понадобится: пока либо не заполнится буфер, либо вы не добавите новую строку. Или вы явно сбрасываете его.

Итак, вы можете сделать

printf("Something\n");
delay();

или

printf("Something");
fflush(stdout);
delay();
0 голосов
/ 07 октября 2009

Технически это не должно даже компилироваться. В вызове delay("sleep 3") вы пытаетесь преобразовать const char * в float. Должно быть:

void delay (float sec)
{
    // ...
}

delay(3);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...