尝试并捕获C ++

时间:2017-05-14 00:01:51

标签: c++

我无法在此代码中尝试并捕获正常工作。它使代码无法获得" loopy"但是,当输入字符而不是数字时,它不会给出cout<<<&#;;无效的条目&#34 ;;响应我正在寻找。我的教授暗示要使用try和catch方法,如果有更好的方法来捕获一个字符,那里应该有一个int我愿意接受建议。 这是代码。这是一个FizzBu​​zz的作业。

int main() {
    int choice, choiceArray;
    string userArray;

    cout << "Welcome to the FizzBuzz program!"<< endl;

    cout << "This program will check if the number you enter is divisible by 3, 5, or both." << endl;

    try {
        while(true) {       
            cout << "Enter a positive number"<< endl;
            cin >> choice;
            cout << endl;

            if (choice % 3 == 0 && choice % 5 == 0) {
                cout << "Number " << choice << " - FizzBuzz!" << endl;
                break;
            }
            else if (choice % 3 == 0) {
                cout << "Number " << choice << " Fizz!" << endl;
                break;
            }
            else if (choice % 5 == 0) {
                cout << "Number " << choice << " Buzz!" << endl;
                break;
            }           
            else {
                cout << "Number entered is not divisible by 3 or 5, please try again." << endl;
            }   
        } 
    }
    catch (...) {
        cout << "Invalid entry" << endl;
    }
}

2 个答案:

答案 0 :(得分:5)

cin默认情况下不使用例外,您可以使用

打开它们
cin.exceptions(std::ifstream::failbit);

没有例外,您还可以通过明确检查流状态来检测错误输入,例如

if (cin >> choice) { /* ok */ }
else { /* bad input */ }

无论哪种方式,您都必须重置失败状态(cin.clear())并从流中删除错误数据(std::numeric_limits<std::streamsize>::max()),然后再次尝试。

答案 1 :(得分:3)

除了@Ben said之外,catch任何未指定的行为

都是一个相当不错的主意。
catch (...) {
    cout << "Invalid entry" << endl;
}

这应该是绝对的最后手段,由于"Invalid entry"或任何不同的原因,你无法可靠地告诉它是一个例外。

至少你应该先找到std::exception而不是

catch (const std::exception& e) {
   cout << "Exception caught: '" << e.what() << "'!" << endl;
}
catch(...)  {
   cout << "Exception caught: Unspecified reason!" << endl;
}

并使用what()函数提供更具体的信息。