2016-03-01 81 views
2

我希望程序循環,直到輸入有效(x是一個int,x> 0),但我的程序接受輸入,當我給它1,1無限循環,當我給它一個字符串,重複「錯誤的輸入!」。輸入檢查在c + +中的問題

#include <iostream> 

using namespace std; 

int main() 
{ 
    bool fail; 
    int x; 
    do{ 
     cin >> x; 
     fail=(cin.fail() || x<=0); 
     if (fail){ 
      cout << "Wrong input!" <<endl; 
      cin.clear(); 
     }; 
    }while(fail); 
    return 0; 
} 

回答

2

在if語句中使用標準成員函數ignore。例如

std::cin.ignore(std::numeric_limits<std::streamsize>::max(),’\n’); 

或只是

std::cin.ignore(); 

它用於跳過在緩衝器無效符號。

+0

我應該用它代替cin.clear()? – R2DToo

+0

@ R2DToo在cin.clear()之前插入呼叫 –

+0

對輸入「asd」仍然保持循環。 對於「1.1」,它給出1 – R2DToo

0

你可以看整條生產線和轉換線與字符串流:

#include <iostream> 
#include <sstream> 

int main() 
{ 
    bool fail; 
    int x; 
    do{ 
     std::string line; 
     fail = ! getline(std::cin, line); 
     if(! fail) { 
      std::istringstream s(line); 
      fail = ! (s >> x) 
       || x < 0 
       || ! s.eof(); // The entire line represents an integer 
     } 
     if(fail) { 
      std::cout << "Wrong input!" << std::endl; 
     }; 
    } while(fail); 
    return 0; 
} 
+0

是的,它的工作原理!謝謝! – R2DToo