//R. A. Hillyard
//cinTest3.cpp
//program to demonstrate how to recover from
//input errors using the cin member functions
//
//part three - handle case where there is extra data
//on the input stream. i.e. 55.66 or 76Hello
#include<iostream> //new style of include
#include<cctype>
using namespace std;
int main()
{
char charChoice; //hold character entered by user
int intChoice; //hold int entered by user
char next;
do
{
cout << "\n*** Welcome to some program ***\n\n";
bool flag = true;
do
{
cout << "Enter an integer : ";
cin >> intChoice;
if(cin.fail()) //had a failure reading the input
{
cin.clear(); //must reset stream after failure
cout << "Invalid input - try again\n";
cin.get(next); //now get any remaining chars from the stream
while(next != '\n') //reads until end of line
cin.get(next);
}
else
{
cin.get(next); //now get any remaining chars from the stream
while(next != '\n') //reads until end of line
cin.get(next);
flag = false;
}
}while(flag);
cout << "You entered a: " << intChoice << endl;
cout << "\nTry again?? [Y/N]: ";
cin >> charChoice;
charChoice = toupper(charChoice);
}while(charChoice != 'N');
}//end main
//run the program with the following data and note the results
//test1 - enter 5 (valid integer)
//test2 - enter c (char - invalid integer - catch it this time)
//test3 - enter 55.66 (should work now)
//test4 - enter 76Hello (should work now)