实现异常处理的问题

时间:2017-08-23 08:34:33

标签: c++ exception-handling

我有一个名为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");
    }
    }

0 个答案:

没有答案