2013-02-08 27 views
0

我寫一個應該只接受整數一個程序,我目前使用Cin.clear()問題

int x; 
cin >> x; 
while(cin.fail()){ 
    cout << "error, please enter an integer" << endl; 
    cin.clear(); 
    cin.ignore(); 
    cin >> z; 
    cout << "you entered" << z << endl; 
} 

但是如果我輸入一個雙例如1.2程序忽略小數點,但套z的值爲2,並且不請求用戶輸入。 我能做些什麼來阻止它?

+2

'while(cin.fail())'你確定嗎? – 2013-02-08 15:35:19

回答

4

在此之前熄滅的手,這裏又是一次的輸入操作的一個典型的例子:

#include <string> // for std::getline 
#include <iostream> // for std::cin 
#include <sstream> // for std::istringstream 


for (std::string line; std::cout << "Please enter an integer:" && 
         std::getline(std::cin, line);) 
{ 
    int n; 
    std::istringstream iss(line); 

    if (!(iss >> n >> std::ws) || iss.get() != EOF) 
    { 
     std::cout << "Sorry, that did not make sense. Try again.\n"; 
    } 
    else 
    { 
     std::cout << "Thank you. You said " << n << ".\n"; 
    } 
} 

它會不斷地問你爲整數,直至關閉輸入流或以其他方式終止它(例如通過鍵入Ctrl-D)。

您會在本網站上發現數百個(如果不是數千)此主題的變體。