【发布时间】:2014-08-26 20:07:13
【问题描述】:
我遇到了 do try catch while block 的问题——我放了 2 个可以抛出异常的函数。用户应该输入 3 个参数(每个参数都有自己的要求)。当我输入错误的第一个参数时 - 循环运行良好 - 用户必须再次输入。问题是当我输入好的第一个参数,但第二个错误 - 我得到一个无限循环。
代码如下:
**main**:
int main()
{
int DL;
pair <bool,bool> DS;
bool dobrze = true;
do
{
try
{
DL = getDl(&dobrze);
DS = getDS(&dobrze);
}
catch(int err_no)
{
cout << "Wrong parameter:";
switch (err_no)
{
case 0: cout << " length.";
break;
case 1: cout << " big letters.";
break;
case 2: cout << " other characters.";
break;
}
cout << endl;
}
}while (dobrze == true);
}
**functions**
int getDl (bool dobrze)
{
int dl;
cout << "Length [1 - 64]: ";
cin >> dl;
if ( dl <= 0 || dl > 64 )
{
dobrze = false;
throw 0;
}
dobrze = true;
return dl;
}
//------------------------------
pair<bool,bool> getDS(bool dobrze)
{
pair<bool,bool> ds;
cout << "Big letters [0/1]: ";
cin >> ds.first;
if ( ds.first != 0 && ds.first != 1)
{
dobrze = false;
throw 1;
}
dobrze = true;
//-----------
cout << "Other characters [0/1]: ";
cin >> ds.second;
if ( ds.second != 0 && ds.second != 1)
throw 2;
dobrze = true;
return ds;
}
这是什么原因?
【问题讨论】:
-
DL = getDl(&dobrze);DS = getDS(&dobrze);为什么你传递dobrze的地址而不是dobrze本身? -
在流 IO 期间避免异常,改为使用一些适当的错误处理。另外,抛出一些 std::exception 或派生的东西。
-
因为某人的手指很胖并且输入了不正确的内容而引发异常不是异常情况。因此,您不应该在这种情况下抛出异常。
标签: c++ while-loop try-catch