【发布时间】:2018-02-20 17:50:13
【问题描述】:
我对 try...catch... 的用法有疑问。 我想知道如何在用户输入错误数据并且需要在程序继续之前进行更正等情况下充分利用 try....catch...。在第一个代码中,我不能在没有循环的情况下继续使用,如果我想使用循环,我可以简单地使用 if...else... 进行错误检查,就像第二个代码一样。我真的需要 try...catch... 吗?
int size;
try
{
cin >> size;
Stack stack(size); //create a Stack(int) object.
}
catch(InvalidStackSize e)
{
cerr << "Invalid size for stack.\n";
continue; //What should I do here to ensure a stack with right size is entered before proceeding with rest of the program?
}
在第二个代码中,我使用带有 if...else... 的循环语句。如果我总是需要循环来获得正确的用户输入,为什么要使用 try...catch... ?
int size;
Stack stack;
do
{
cin >> size;
if( size == 0 )
continue;
else
{
Stack tmp(size);
stack = tmp;
break;
}
}while(true);
【问题讨论】:
-
您应该只对异常行为使用异常。一个简单的 if 条件可以在这里工作。所以你的答案是否定的。
-
您可能应该创建一个函数
int get_integer_until_non_zero()来摆脱主代码中的while 循环:Stack stack{get_integer_until_non_zero()};。 -
异常应该仅限于处理异常情况。输入错误的用户也不例外。
-
“为什么要使用 try catch?” 在解决任何特定问题时,很少有 C++ 功能是强制性的。您是否就这个话题征求意见?
-
@DrewDormann 希望确保我没有遗漏任何 try catch 功能...
标签: c++ error-handling try-catch