有人可以向我解释为什么我的代码在用户输入int菜单变量的char时不会导致无限循环或崩溃?我测试了它,它确实工作正常,但会认为它会崩溃...非常感谢!
int menu;
int drawCheck = 0;
cout << "Press 1 to play a friend\n";
cout << "Press 0 if for some reason you opened this and now dont want to play...\n";
cin >> menu;
while (menu!= 1) //User enters a number that isnt 1
{
if(menu ==0)
{
exit(EXIT_SUCCESS); //When user enters 0 the program will exit
}
cout << "Please enter either 1 to play a friend or 0 to exit: "; //Will ask untill player enters either 1 or 0
cin >> menu;
}
答案 0 :(得分:2)
我测试了它,它确实可以正常工作......
我不确定你怎么能声称它的作用是什么&#34;纠正&#34; ...如果用户键入一个字母是正确的 - 继续或终止?为什么呢?
无论如何,给定......
int menu;
cin >> menu;
从C ++ 11开始,如果将int
从cin
解析为menu
失败,menu
将设置为零,每22.4.2.1.2 / 3:
要存储的数值可以是以下之一:
- 零,如果转换函数无法转换整个字段。 ios_base :: failbit分配给err。
...(成功解析num的范围内/外的其他行为)......
因此,使用C ++ 11,输入一封信对menu
的影响与输入0
的影响相同,导致您的程序退出。
在C ++ 11之前,解析失败后menu
的值将是未定义的(即使它已被初始化),随后使用menu
未定义的行为。但是,你无法推断未定义的行为将如何表现出来 - 在程序的某些特定执行中 - 它可能碰巧与你希望发生的事情相匹配。