1

One part of my program: Let user input a series of integer, and then put them into an array.

int n=0;
cout<<"Input the number of data:";
cin>>n;
cout<<"Input the series of data:";
int a[50];
for(i=0; i<n; i++)
{
    cin>>a[i];

}

Then, when user input wrong data such as a character 'a' or 'b'. The program will go into an infinite loop.

How to catch the wrong cin? How to clear the buffer and give user the chance to input a right data again?

1
  • Remember that input (and output) streams can be used in boolean expressions, like in an if statement. Commented Mar 5, 2014 at 9:28

2 Answers 2

4

Simply check if the input is a number first and then append it to the array

    int x;
    std::cin >> x;
    while(std::cin.fail())
    {
        std::cin.clear();
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
        std::cout << "Bad entry.  Enter a NUMBER: ";
        std::cin >> x;
    }

    a[i] = x;
Sign up to request clarification or add additional context in comments.

1 Comment

@YingliYan Accept the answer so others know this solution works :)
1

Clear the cin state and ignore bad input.

for(i=0; i<n; i++)
{
    while (!(cin>>a[i])) {
        cin.clear();
        cin.ignore(256,'\n');
        cout << "Bad Input, Please re-enter";
    }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.