2013-04-22 80 views
0

我試圖在C語言中編寫一個簡單的「打字機」效果,其中文本每次在延遲時間出現一個字母。這是我具備的功能:輸出不會顯示,直到出現換行符爲止

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

void typestring(const char *str, useconds_t delay) 
{ 
    while (*str) { 
     putchar(*(str++)); 
     usleep(delay); 
    } 
} 

問題是文本實際上並沒有出現,直到顯示\n。我究竟做錯了什麼?

+0

我一直告誡這麼多次對fflush()的thingie,特別是fflush(標準輸入),我已經使用fflush辭去()完全。 – 2013-04-22 08:21:24

+0

任何人都可以給這個打字機問題的替代解決方案,而不使用fflush()? – 2013-04-22 08:21:49

+0

我不知道在Windows中是否可行,但在Linux中可以使用''並將終端設置爲非緩衝。看看我的帖子中的鏈接 – 2013-04-22 08:23:31

回答

3

輸出到stdout被緩衝。使用\n你迫使同花順。如果你想改變這一點,你需要更改終端設置(對於Linux看起來here),或使用

void typestring(const char *str, useconds_t delay) 
{ 
    while (*str) { 
     putchar(*(str++)); 
     fflush(stdout); 
     usleep(delay); 
    } 
} 
+0

難道你不是指'stdout'?無論如何,一旦我做出了改變,它就完美無缺。非常感謝! – flarn2006 2013-04-22 08:20:13

+0

你應該刷新'stdout'而不是'stdin'。 – Rohan 2013-04-22 08:20:13

+0

不確定,但這裏的聰明人已經告誡我多次反對使用fflush(stdin)。 – 2013-04-22 08:20:15

2

你的輸出流可能已經得到緩衝,'\n'刷新緩衝區。

嘗試fflush(stdoutputchar()後,作爲

while (*str) { 
     putchar(*(str++)); 
     fflush(stdout); 
     usleep(delay); 
    } 
1

\n隱含迫使輸出裝置以沖洗緩衝的輸入。要刷新你應該明確地使用fflush

fflush(stdout); 
0

輸出流緩衝,這就是爲什麼文本實際上沒有出現,直到一個\ n爲顯示 「\ n」刷新輸出流(硬紅)手動將做同樣你可以撥打 這個功能[fflush(stdout)]。

while (*str) { 
     putchar(*(str++)); 
     fflush(stdout); 
     usleep(delay); 
    } 

,或者您可以使用

while (*str) { 
      printf("%c\n",*(str++)); 
      usleep(delay); 
     }