我有一个名为createBook的函数。在函数中,我要求用户输入BookId和BookName。我想在这里实现异常处理。
我想要的是每当除了int之外的任何其他字符都输入BookId(因为它是int类型),那么它应该打印"无效的bookid"然后再次调用函数createBook。
我尝试过这样做,但我在这里遇到了一个无限循环。有人可以指导吗?
void create_book()
{
system("cls");
cout<<" ....CREATE NEW BOOK....\n\n\n";
cout<<" Enter book id no:\t";
cin>>bid;
cin.ignore();
if(!isdigit(bid))
{
try{
throw 10;
}
catch(int e){
cout<<" Invalid bookid";
create_book();
}
}
cout<<" Enter book name:\n";
getline(cin, bname);
for (int i = 0; i < bname.length(); i++) {
bname[i] = toupper(bname[i]);
}
cout<<" Enter author's name:\n";
getline(cin, aname);
for (int i = 0; i < aname.length(); i++) {
aname[i] = toupper(aname[i]);
}
cout<<"\n Book Type Menu:\n";
cout<<" 1: Course Book\n";
cout<<" 2: Reference Book\n";
cout<<" 3: Journals\n";
cout<<" 4: Research Papers\n";
int b;
do{
cout<<" Enter code for type of book:\t";
cin>>b;
}while(b<=0 || b>4);
btype = static_cast<booktype>(b);
cout<<"\n Subject Menu:\n";
cout<<" 1: Physics\n";
cout<<" 2: Computer Science\n";
cout<<" 3: Electrical and electronics\n";
cout<<" 4: Chemistry\n";
cout<<" 5: Mathematics\n";
cout<<" 6: Literature\n";
cout<<" 7: Others\n";
do{
cout<<" Enter code for subject of book:\t";
cin>>b;
}while(b<=0 || b>8);
subject = static_cast<subjecttype>(b);
}
string return_book_type()
{
switch(btype){
case 1: return("Course Book");
break;
case 2: return("Reference Book");
break;
case 3: return("Journals");
break;
case 4: return("Research Papers");
break;
default: return("NULL");
}
}
string return_subject_name()
{
switch(subject){
case 1: return("Physics");
break;
case 2: return("Computer Science");
break;
case 3: return("Electrical and electronics");
break;
case 4: return("Chemistry");
break;
case 5: return("Mathematics");
break;
case 6: return("Literature");
break;
case 7: return("Others");
break;
default: return("NULL");
}
}