【发布时间】:2018-04-25 12:48:29
【问题描述】:
我正在尝试在程序中创建一个选择列表,但现在我对用户输入错误输入时会发生什么感到困惑。
我试过用 do 循环来做这件事(我已经循环了 switch 语句)。另外,尝试将变量 key 设置为整数和字符,但两者都有问题。 Char 只需要一个字符,当你写多个字符时,它会自行检查每个字符。使用 int 输入错误时,我会得到 menu 函数的无限循环。
另外,我尝试在 stackoverflow 中使用 cin.fail(),我在这里找到了它,但没有成功。
void menu()
{
if(!isEmpty())
{
showStack();
}
else
{
cout << "stekas tuscias!" << endl;
}
cout << "---------------------------" << endl;
cout << "1. Iterpti i steka (push)" << endl;
cout << "2. Pasalinti is steko (pop)" << endl;
cout << "3. Issaugoti steka" << endl;
cout << "4. Issaugoti steka ir uzdaryti programa" << endl;
cout << "---------------------------" << endl;
cout << "Jusu pasirinkimas: ";
char key;
cin >> key;
switch(key)
{
case '1':
{
cout << "Irasykite reiksme i konsole: ";
int data;
cin >> data;
cout << endl;
push(data);
break;
}
case '2':
{
cout << endl;
pop();
break;
}
case '3':
{
write();
cout << "--------" << endl;
cout << "Stekas issaugotas!" << endl;
cout << "--------" << endl;
menu();
break;
}
case '4':
{
write();
break;
}
default:
{
cout << "Tokio pasirinkimo nera!" << endl;
cout << endl;
key = '\0';
menu();
break;
}
}
}
如果需要,我的整个代码:https://pastebin.com/Xv1HE0Mh
【问题讨论】:
-
在任何情况下,使用循环而不是递归可能是一个好的开始。
-
递归的使用是非常的。非常非常糟糕的主意。
-
没关系:tailrec优化。 (是的,这是个笑话)
-
那么会发生什么?您是否设置了断点并单步执行并逐行查看为什么会发生一切?
标签: c++ switch-statement