2017-02-11 59 views
2

同事!我試圖在我的代碼中使用sleep()函數以及system()函數。代碼應該顯示第一條消息,然後倒計時,每次打印剩餘秒數並等待1秒。然後屏幕應該被清除。我想製作一個簡單的文字動畫。但該程序無法按預期工作!我檢查了我的代碼,它看起來像我沒有語法或邏輯錯誤。當我編譯並運行此代碼時,首先等待五秒鐘,然後將消息打印到標準輸出甚至不等待,然後立即清除屏幕。我認爲這是一個運行時錯誤,儘管它不應該在邏輯上發生。如果以下信息相關,我將從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的行或以其他方式手動刷新緩衝區。