In: Computer Science
C++ Zybook Lab 16.5 LAB: Exception handling to detect input string vs. int
The given program reads a list of single-word first names and ages (ending with -1), and outputs that list with the age incremented. The program fails and throws an exception if the second input on a line is a string rather than an int. At FIXME in the code, add a try/catch statement to catch ios_base::failure, and output 0 for the age.
Ex: If the input is:
Lee 18 Lua 21 Mary Beth 19 Stu 33 -1
then the output is:
Lee 19 Lua 22 Mary 0 Stu 34
Here's the code:
#include <string>
#include <iostream>
using namespace std;
int main(int argc, char* argv[]) {
string inputName;
int age;
// Set exception mask for cin stream
cin.exceptions(ios::failbit);
cin >> inputName;
while(inputName != "-1") {
// FIXME: The following line will throw an ios_base::failure.
// Insert a try/catch statement to catch the exception.
// Clear cin's failbit to put cin in a useable state.
try{
//Reading age
cin >> age;
//Printing Name and age incremented by 1 if correct values are
entered
cout << inputName << " " << (age + 1) <<
endl;
}
catch(ios_base::failure){
//Clear cin
cin.clear();
}
cin >> age;
cout << inputName << " " << (age + 1) <<
endl;
cin >> inputName;
}
return 0;
}
Please look at my code and in case of indentation issues check the screenshots.
---------------main.cpp----------------
#include <string>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
string inputName;
int age;
// Set exception mask for cin stream
cin.exceptions(ios::failbit);
cin >> inputName;
while (inputName != "-1")
{
// FIXME: The following line will
throw an ios_base::failure.
// Insert a try/catch statement to
catch the exception.
// Clear cin's failbit to put cin
in a useable state.
try
{
//Reading age
cin >>
age;
//Printing Name
and age incremented by 1 if correct values are entered
cout <<
inputName << " " << (age + 1) << endl;
}
catch (ios_base::failure)
{
//Clear cin
cout <<
inputName << " 0" << endl;
//on exception, print name and age as 0
cin.clear();
//clear the failbit
cin.ignore(256,'\n');
//ignore
the current input until a new line '\n' is encountered
}
cin >> inputName;
}
return 0;
}
--------------Screenshots--------------------
------------------Output------------------
---------------------------------------------------------------------------------------------------------
Please give a thumbs up if you find this answer helpful.
If it doesn't help, please comment before giving a thumbs
down.
Please Do comment if you need any clarification.
I will surely help you.