2013-05-27 5 views
0

Я написал следующий код, чтобы напечатать символ абзаца символом с интервалом в 0,3 секунды. Но когда я компилирую и запускаю его, он печатает все в предложении. Почему функция наносекунды не работает?Почему мой нанослоп не работает ...?

#include <stdio.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <time.h> 

int main() { 
    int i = 0; 
    struct timespec t1, t2; 
    t1.tv_sec = 0; 
    t1.tv_nsec = 300000000L; 

    char story[] = {"I want to print this story/letter by letter on the screen./"}; 
    while(story[i] != '\0') { 
     if(story[i] == '/') 
      sleep(1); 
     else 
      printf("%c", story[i]); 
    nanosleep(&t1, &t2); 
     i++; 
    } 
    return 0; 
} 

ответ

8

Ваш код вызова printf в правильных интервалах, но stdout не держит весь вывод в буфере до конца.

Поместите fflush(stdout); перед нанесением нанослоя, чтобы заставить его печатать сразу.

+0

Печать на 'stdout' обычно буферизируется. Тем не менее, отсутствие хороших источников. См. Http://stackoverflow.com/questions/1716296/why-does-printf-not-flush-after-the-call-unless-a-newline-is-in-the-format-strin – Spidey

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