我遇到了 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);
这里不是:
pair<bool,bool> getDS(bool dobrze)
不幸的是,对于您的调试尝试,bool
是极少数从指向自身的指针隐式初始化的数据类型之一。实际上你的电话是
DL = getDl((bool)(&dobrze));
与
相同DL = getDl(nullptr != &dobrze);
这只是
DL = getDl(true);
您的程序中没有任何内容可以更改 main 中的 dobrze
变量并结束循环。
你可以通过打开警告来捕获这个...你的编译器应该已经通知你行 dobrze = true;
和 dobrze = false;
写到一个永远不会读取的变量(本地拷贝)。
关于c++ - Do - Try/Catch - While block 内部有 2 个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25514338/