如果我们在需要整数的switch case中输入一个字符会发生什么

时间:2015-02-07 09:18:11

标签: c++ integer switch-statement character

  do{
    cout<<"Enter the task to perform \n";
    cout<<"1. push an element \n";
    cout<<"2. pop an element \n";
    cout<<"3. peep the elements \n";
    cout<<"4. retain odd elements \n";
    cout<<"5. remove till element n \n";
    cout<<"6. Display the elements \n";
    cout<<"7. exit \n";
    cin>>a;
    switch(a){

        case 1:
        .
        .
        .
        .
        case 2:



        case 7:
        return 1;

        default:
        cout<<"Crap entry Reenter \n\n\n\n\n";

    }


}while(a != 7);
return 0;

这是我试图制作堆栈的代码 如果我在开关盒中输入一个字符,我会得到一个无限的while循环为什么它如此

2 个答案:

答案 0 :(得分:1)

如果switch的类型为a,则char会根据ASCII value对字符进行评估。

如果aint,则输入字符会将cin流设置为失败状态(可以使用cin.fail()查询)。

答案 1 :(得分:0)

请注意 a的声明及其初始化方式为FUNDAMENTAL以提供正确答案,因此请在您的代码段中显示该声明。

顺便说一下,如果a是一个整数,并且在cin中有些东西无法作为int读取,cin>>a会失败,cin会被阻止(所以任何进一步的读取都会失败),值未读

因此a将保留其旧值(并且可能不会7,因此不会return完成)并且永远不会更改。

确保阅读的正确方法可以是使用,而不是cin>>a

while(!(cin>>a))
{
    cout << "bad input: re-enter" << std::endl;
    cin.cler(); 
    cin.ignore(numeric_limits<streamsize>::max(),'\n');
}

换句话说,直到cin>>a不成功,错误状态才会被清除,并且你可能会把它丢弃,丢弃,以便新的读取不会重新读取相同的垃圾。