如何制作过滤掉非整数的C ++程序?

时间:2010-09-29 22:15:43

标签: c++

像这样的东西

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 ;
   }

5 个答案:

答案 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);     
}