- 已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
2天前关闭。
这篇文章是昨天编辑并提交审查的。
Improve this question
我是c++新手,我有一个try/catch程序,但是每当我试图测试第二个catch块看它是否捕获了相关的throw语句时,程序就会打印第一个catch块的消息,代码如下:
我试过将特定的错误(比如std::invalid_argument)改为更一般的错误,比如std::exception,但是对于我的错误信息来说,这还不够具体。这是一个类,代码必须考虑到用户输入不是数字,或者不是数字1 - 4。
//c++
/*For context, choice is an integer from
User input that is supposed to be a number 1-4.*/
void search() {
int choice;
std::cout << "Search by:\n1:Title\n2:Year\n3:Actor\n4:Rating\n";
try {
std::cin >> choice;
if(!isdigit(choice)) {
throw std::invalid_argument("Please type a number. \n");
}
if(choice >= 5 || choice <= 1) {
throw out_of_range("Please input a number between 1 and 4");
}
}
catch(std::out_of_range const& e){
std::cout << e.what();
cin.clear();
}
catch(std::invalid_argument const& e) {
std::cout << e.what();
}
对不起,如果它不是最好的,我还在学习。问题是out_of_range catch语句在抛出时不打印错误消息。我只得到invalid_argument抛出/捕获响应。
1条答案
按热度按时间sauutmhj1#
这条线
并不像你想的那样。它返回一个字符代码,比如
'x'
(ASCII格式为120
)或'4'
(ASCII中的52
)是否为数字。(即对于'0'
和'9'
之间的所有字符代码返回真)。但是choice
不表示字符代码,它表示用户以整数形式键入的数字。如果我没记错的话,如果输入的不是一个有效的整数,
choice
将是0
,在这种情况下,您可以将代码保持为: