2016-03-01 85 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