像这样的东西
cout << "Enter the number of columns: " ;
cin >> input ;
while( input != int ){
cout << endl <<"Column size must be an integer"<< endl << endl;
cout << "Enter the number of columns: " ;
cin >> input ;
}
答案 0 :(得分:4)
cin
会为你做这件事。 cin
如果收到的内容与input
的类型不同,则会失败。你能做的是:
int input;
while(!(cin >> input))
{
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << endl <<"Column size must be an integer"<< endl << endl;
cout << "Enter the number of columns: " ;
}
cin.clear()
清除错误位,cin.ignore()
清除输入流。我正在使用number_limits
来获取流的最大大小,这需要您#include<limits>
。或者,您可以使用大数字或循环。
答案 1 :(得分:3)
你不能那样做; input
必须有一些具体的类型。
最简单的方法是从cin
读取字符串,然后在strtol
或其中一个亲属的第二步中将其转换为整数,如果strtol
没有使用整个字符串,则会发出错误消息。
答案 2 :(得分:1)
#include<iostream.h>
using namespace std;
int main()
{
int x;
int input;
while(!0){
cout<<"Enter your option :";
cout<<"1 .Enter Column size :"<<endl;
cout<<"2.Exit "<<endl;
cin>>x;
switch(x)
{
case 1: cout << "Enter the number of columns: "<<endl ;
cin>>input;
if(input>0)
cout << "The number of columns: is "<<input<<endl ;
else
cout << "Enter the number of columns as integer "<<endl ;
case 2:exit(0);
}
};
return 0;
}
答案 3 :(得分:0)
对于您的问题,这是一个非常基本的解决方案,新的程序员应该对试图破解程序的人有用。最终有更先进和有效的方法来实现这一目标。
int input;
int count = 1;
while(count == 1){ //this is just a simple looping design
cin >> input;
if(cin.fail()){ //If the input is about to crash your precious program
cin.clear(); //Removes the error message from internal 'fail safe'
cin.ignore(std::numeric_limits<int>::max(), '\n'); //Removes the bad values creating the error in the first place
count = 1; //If there is an error then it refreshes the input function
}
else{
count--; //If there is no error, then your program can continue as normal
}
}
以下是高级代码:stackoverflow.com/questions/2256527 /
答案 4 :(得分:0)
这里的许多答案都使用了cin的内置过滤器。虽然这些可以防止输入字符或字符串,但它们不会阻止浮点项。输入浮点数时,它将被接受并且十进制值保留在缓冲区中。这会产生以后对cin的请求的问题。以下代码将检查cin错误标志并防止浮动输入。
*注意:cin.ignore语句可能需要进行一些调整才能完全证明代码。
void main()
{
int myint;
cout<<"Enter an integer: ";
intInput(myint);
}
void intInput(int &x)
{
bool valid = true; //flag used to exit loop
do
{
cin>>x;
//This 'if' looks for either of the following conditions:
//cin.fail() returned 'true' because a char was entered.
//or
//cin.get()!='\n' indicating a float was entered.
if(cin.fail() || cin.get()!='\n')
{
cout<<"Error. The value you entered was not an integer."<<endl;
cout<<"Please enter an integer: ";
cin.clear(); //clears cin.fail flag
cin.ignore(256,'\n'); //clears cin buffer
valid = false; //sets flag to repeat loop
}
else valid = true; //sets flag to exit loop
}while(valid == false);
}