Функция usleep () не позволяет продолжить цикл - PullRequest
2 голосов
/ 14 февраля 2010
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(void)
{
        int i=0;
        while(i<10)
        {
                printf("%d", i);
                usleep(10000); // or sleep(1)
                i++;
        }
        return 0;
}

Я хочу, чтобы программа длилась 10 секунд, то есть печатать 1 - ждать 1 секунду - печатать 2 - ждать 1 секунду и так далее до конца. Но он этого не делает - он просто ждет все время (10 секунд), а затем печатает весь массив чисел без каких-либо задержек между ними, он просто печатает 0123456789 сразу. РЕДАКТИРОВАТЬ: я пытался с сна () вместо уснуть, но это то же самое Как это исправить? И почему это так?

Ответы [ 3 ]

13 голосов
/ 14 февраля 2010

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

printf("%d\n", i);

или попробуйте это:

printf("%d", i);
fflush(stdout);

Кроме того, если вы хотите удалить поведение буферизации строки, вы можете использовать setvbuf() и режим _IONBUF.

5 голосов
/ 10 января 2013

в сторону - чтобы передать 1 секунду usleep, позвоните usleep(1000000)

2 голосов
/ 14 февраля 2010

вызов fflush(stdout) после каждого printf для очистки буферизованного вывода

...