2015-10-16 69 views
0

我現在開始用C++,所以我想這將是一個非常容易新手的問題。爲什麼在cin裏面不停地獲取用戶輸入?

那麼,爲什麼內部的「cin >> x」行不停止循環以獲取用戶輸入(如果用戶輸入字符,而不是數字)呢?

#include <iostream> 
using std::cin; 
using std::cout; 
using std::endl; 

int main() 
{ 
    int x = 0; 
    cout << "Please, enter x: "; 
    cin >> x; 
    while (!cin) 
    { 
     cout << "Please, it must be a number!\n"; 
     cin >> x; 
    } 
    cout << "Thanks!."; 
    cin.ignore(); 
    cin.ignore(); 
} 

我幾乎沒有兩天正在學習C++,所以我完全不知道「cin」究竟是什麼。我嘗試了「cin.sync()」和「cin.clear()」,但仍然沒有運氣。 而且我知道不可能做類似「cin = true」或「cout < < cin」的東西。

回答

1

嗯,你的程序應稍微

#include <iostream> 
using std::cin; 
using std::cout; 
using std::endl; 

int main() 
{ 
    int x = 0; 
    cout << "Please, enter x: "; 
    cin >> x; 
    while (!cin) 
    { 
     cin.clear(); 
     cin.ignore(10000, '\n'); 
     cout << "Please, it must be a number!" << endl; 
     cin >> x; 
    } 
    cout << "Thanks!."; 
} 

糾正這樣它按預期工作。更多關於它的信息here。一般來說,你需要清除所有來自cin的錯誤東西。

+0

謝謝!現在有效。 我想用cin.clear();和cin.ignore();但不知道cin.ignore裏面有什麼「1000」。 現在我有一條路要走。感謝代碼和鏈接! – Reaversword

0

如果用戶輸入一個字符比它將採用字符的ascii值,所以它不會停止。 要停止循環輸入0

+0

嗯?我正在使用Visual Studio 2015. 我可以觀察到的行爲是:輸入一個數字(甚至是0)>我收到消息「謝謝」,但是如果輸入字符,則消息「請輸入數字」將永久重複。 – Reaversword