为什么这段代码不会破坏cin? char为int变量c ++输入

时间:2016-03-14 03:25:44

标签: c++ crash char int

有人可以向我解释为什么我的代码在用户输入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; 
}

1 个答案:

答案 0 :(得分:2)

  

我测试了它,它确实可以正常工作......

我不确定你怎么能声称它的作用是什么&#34;纠正&#34; ...如果用户键入一个字母是正确的 - 继续或终止?为什么呢?

无论如何,给定......

int menu;
cin >> menu;

从C ++ 11开始,如果将intcin解析为menu失败,menu将设置为零,每22.4.2.1.2 / 3:

  

要存储的数值可以是以下之一:

     

- 零,如果转换函数无法转换整个字段。 ios_base :: failbit分配给err。

     

...(成功解析num的范围内/外的其他行为)......

因此,使用C ++ 11,输入一封信对menu的影响与输入0的影响相同,导致您的程序退出。

在C ++ 11之前,解析失败后menu的值将是未定义的(即使它已被初始化),随后使用menu未定义的行为。但是,你无法推断未定义的行为将如何表现出来 - 在程序的某些特定执行中 - 它可能碰巧与你希望发生的事情相匹配。