2017-02-11 8 views
2

同僚!私はsystem()関数と共に私のコードのsleep()関数を使用しようとしました。コードは、最初のメッセージを表示してから、数秒後に1秒間待機するたびにカウントダウンします。その後、画面をクリアする必要があります。私は単純なテキストアニメーションを作りたいです。しかし、プログラムは期待どおりに動作しません!私は自分のコードをチェックして、構文や論理エラーがないように見えます。このコードをコンパイルして実行すると、まず5秒待ってから、待っていなくてもメッセージをstdoutに出力し、直ちに画面をクリアします。私はこれがランタイムエラーだと考えていますが、論理的には起こらないはずです。以下の情報が関係する場合は、Linux端末からC++プログラムをコンパイルして実行します。C++のsleep()関数が期待通りに動作しない

#include <iostream> 
#include <cstdlib> // includes system(); 
#include <unistd.h> // includes sleep(); 
using std::cout; 
using std::cin; 
using std::endl; 

int main() { 
    cout << "Clearing the screen in: "; 
    for (int i = 5; i > 0; i--) { 
    cout << i << " "; 
    sleep(1); // takes seconds 
    } 
    system("clear"); 

    return 0; 
} 

答えて

5

出力は通常バッファされ、バッファがいっぱいになるか、ファイルが閉じられるまで出力されません。あなたはflushの出力が必要です。

cout << i << " " << std::flush; 
3

coutそれがで-間それがフラッシュしたときに、あなたが一度にすべてを印刷し、印刷しているものを保存しているので、バッファリングされています。

<< std::endl;を印刷する行にiを追加するか、バッファを手動でフラッシュするか、どちらかを選択できます。

関連する問題