2016-08-14 98 views
1

我正在嘗試編寫一個程序,其中我正在顯示某些內容,然後清除屏幕並移至下一個屏幕。我正在使用系統(「清除」)清除屏幕。但我注意到它只是以太快的速度清除屏幕。我的意思是,即使我已經放了一個getchar(),它只是不等待鍵盤輸入並執行下一個命令。我無法弄清楚爲什麼!如何在清除屏幕之前等待鍵盤輸入(getchar不起作用)

這是我爲這應該等待擊鍵暫停宏代碼:

#define pause() \ 
do{ \ 
    cout<<"Press any key to continue";\ 
    getchar();\ 
} while(0); 

下面是它使用上面的宏代碼,但下面的代碼不會等待被按下的鍵在清除屏幕之前!

void registerUser() 
{ 
    string uid,passwd; 
    cout <<"Enter UID: "; 
    cin >> uid; 
    cout<<" Enter Password: "; 
    cin>>passwd; 
    bool ret = addUser(uid,passwd); 
    if (ret == false) 
    { 
     cout<<"User "<< uid <<" already exists\n"; // This message is not displayed 
    } 
    else 
    { 
     cout<<"User " << uid <<" Successfully added\n"; // This message is not displayed 
    } 
    pause(); // Program does not wait here as expected 
    system("clear"); // Screen is cleared immediately !! 
} 
+0

爲什麼不使用內聯?宏不是一個好的工具 –

回答

3

std::cin讀取來自輸入流(通常stdin)字符。它在讀取分隔符時停止,默認分隔符爲\n

因此,當它讀取一個序列時,仍然存在尾隨的換行符

getchar()然後會讀取\n並返回。這就是爲什麼沒有停頓。你必須從流中刪除換行符:

std::cin.ignore(); //Discards 1 character from the stream 
2

getchar「將工作」,問題是,你的情況,你正在閱讀的新行留下cin >> passwd;

解決此問題的適當方法是cin.ignore(1000, EOF);,它將忽略直到幷包括下一個換行符的所有字符。

或者不清除屏幕,能夠回滾並查看過去一直在做什麼以及清除屏幕會非常好。