正如标题所说,当输入不是整数而是字符串时,我无法弄清楚为什么这段代码会继续丢弃。
编辑:好像你误解了我的问题,让我澄清并搞砸所有代码。
在我输入教师后,我不想退出该计划,因为有一个案例(案例0)可以处理。我想知道的是,如果我在要求birtdate
而不是整数的部分中输入字符串,代码会保持循环,但如果我输入一个整数,则工作正常。
在这种情况下,如果要输入的整数,程序按预期运行,但当它是一个字符串时,程序会继续循环它要求birthdate
的部分。即使在删除if
和else
之后,它仍会执行相同的操作,因为它没有错误处理,因此会崩溃。
int main()
{
string tempName;
int tempYear;
char input = 't';
bool exit = 0;
do
{
cout << "Please choose one of the following options:" << endl;
cout << "0. Quit" << endl;
cout << "1. Add new Teacher" << endl;
cout << "2. Add new Assistant" << endl;
cout << "3. Add new TA-personel" << endl;
cout << "4. Show all Staff" << endl;
cout << "You chose: ";
cin >> input;
cout << endl;
switch (input)
{
case '0':
exit = 1;
break;
case '1':
cout << "Please enter the name of the teacher: ";
cin >> tempName;
cin.ignore();
cout << "Please enter the birthdate of the teacher: ";
cin >> tempYear;
cin.ignore();
if (!cin.fail())
{
//Nothing
}
else
{
cout << "The input was not a number!";
cout << "1. Please enter the birthdate of the teacher: ";
cin >> tempYear;
}
break;
case '2':
break;
case'3':
break;
case '4':
break;
default:
cout << "Invalid input!" << endl;
break;
}
} while (exit == 0);
getchar();
return 0;
}
答案 0 :(得分:1)
这段代码(或者你完整的MCVE,无论如何,你忽略了共享-.-)将永远循环,因为你永远不会改变命名不佳的变量exit
的值。
请记住检查!cin.fail()
时的情况?这是正确的做法,但你没有为下一次尝试设置失败标志。
cin.clear();
答案 1 :(得分:0)
您没有修改循环内的exit
变量。
因此,如果在循环之前将while
设置为exit
,则0
循环的条件始终为真。
答案 2 :(得分:0)
首先,代码不完整。
1.您需要更改变量名称的值&#34;退出&#34;在switch-case中为非零值以结束与用户选择退出选项相对应的循环。
您需要在do-while循环内以及switch语句开始之前向用户请求新的选择。
将tempyear的变量类型更改为string。 例如:
char char;
do
{
cin>>choice;
switch(choice)
{
case '0': exit=1;
break;
}
}while(exit==0)
当用户输入0
时,这将结束循环<强>更新强>
当您在int变量 tempyear 中输入字符串值时,它进入无限循环的原因是 cin 的错误输入标志输入字符串后设置>。
要解决此问题,您需要在 cin.ignore()之后使用 cin.clear(),以便重置错误输入标记并再次输入 - 如@Lightness Races in Orbit指出