C++ 我应该使用哪个例外?/ 确定用户的输入
C++ Which Exception should I use? / Determine user's input
我是C++的新手,正在测试"try"。然而,我不确定,当投掷可能导致一个单词或短语本身的分裂时,应该抓住什么例外:
例如:
int current_year = 1;
//code....
cout << "What year is it?n";
cin >> current_year;
while (n>1) {
try{
throw (current_year / current_year);
}
catch (exception) {
cout << "What year is it?n";
cin >> current_year;
}
catch (...){
n = 0;
这里,由于current_year被定义为int,但通过"cin<<"设置。如果用户输入一个单词或短语,则程序在将一个单词除以另一个单词时应该会导致错误(hense:sthrow(current_year/current_years);)
但是程序不会捕获带有异常的错误:catch(exception)。请有人解释一下我应该使用什么异常,或者如何修改这个程序来检查current_year是否真的是一个整数。
谢谢。
(还有一件事:isdigit对我不起作用。我相信这是因为它只识别-1到255之间的数字。)。我即将进入2014年。因此,如果我一直在错误地使用isdigit,请让我意识到这一点。)
无论是否输入了有效值,都将抛出类型为int
的值。如果current_year
为零,您可能会得到某种错误-未定义的行为,并且可能不是可捕获的异常;否则,您将始终抛出int
值1。这可以由catch(int)
块来处理;但这没有任何意义。
如果你想抛出用户输入的不是数字,那么你需要检查输入的结果:
if (!(cin >> current_year)) {
throw std::runtime_error("Invalid year");
}
runtime_error
是exception
的子类,因此将被exception
的处理程序捕获。
或者,您可以定义自己的异常类并抛出它。最好是它也是exception
的子类,这样,如果没有更具体的处理程序,它的处理程序至少可以为它提取一条错误消息。这可能看起来像
struct InvalidYear : std::runtime_error {
InvalidYear() : std::runtime_error("Invalid year") {}
};
if (!(cin >> current_year)) {
throw InvalidYear();
}
这可以由InvalidYear
的特定处理程序或runtime_error
和exception
的更多通用处理程序捕获。
您按类型抛出异常。尽管该语言允许任何类型,但通常应该只抛出从std::exception
派生的内容。
您有几个可供选择,std::invalid_argument
可能在这里最有意义,因为它们输入了无效数据。
不过,您的代码没有实际意义,如果发生意外错误,您应该抛出。您应该根据用户做错的内容创建异常。
您只需抛出数字1(current_year / current_year
将始终为1,除非current_year被输入为0,在这种情况下您会遇到更多问题),您将不得不在异常处理程序中捕获一个int,那么捕获1意味着什么?
最好避免catch(...)
。有时,当你真的不允许你的函数抛出时,就会使用它,例如,你在某个工作线程中,没有什么能抓住它,它只会导致你的应用程序终止,而最好让线程作为失败的作业终止。
- C++如何通过用户输入删除列表元素
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 通过for循环使用用户输入填充列表
- 在C++中,我如何接受不同于同一行的用户输入
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 显示基于用户输入的整数的字符
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 我试图制作一个程序,要求用户输入问题和答案,但程序循环不正确
- 打印时有二叉树问题.用户输入不打印任何内容
- C ++奇怪的数组由用户输入
- 如何允许大写和小写用户输入?
- C++读取用户输入而不按回车键(Mac OS X),与Turbo Pascal中的读取键相同
- 如何存储用户输入的所有数据,然后在他们想要查看所有数据时显示它们
- 如何使用用户输入变量制作二维数组?
- 用户输入字符串的文件附加问题..C++
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 如何使用递归循环我的代码(当用户输入无效输入时,它会再次提示他们)?