如果我们在需要整数的开关情况下输入字符会发生什么

what happens if we input a character in a switch case where an integer is required

本文关键字:字符 输入 什么 情况下 开关 我们 整数 如果      更新时间:2023-10-16
  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 nnnnn";
    }

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

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

请注意

a的声明及其初始化方式是提供正确答案的基础,因此请让该声明在您的代码段中可见。

顺便说一下,如果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不会成功,错误状态将被清除,并且您可能拥有的任何垃圾都将被丢弃,以便新读取不会重新读取相同的垃圾。

如果a的类型为 char,则switch按字符的 ASCII 值计算字符。

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