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

标签 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;

这是我尝试创建堆栈的代码 如果我在 switch case 中输入一个字符,我会得到一个无限的 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 不成功,错误状态被清除,无论你可能有什么垃圾,都被丢弃,这样新的读取就不会重新读取同样的垃圾。

关于c++ - 如果我们在需要整数的 switch case 中输入一个字符会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28380421/

相关文章:

java - 在 Java 中打印整数数组的唯一值的总和

c++ - 具有 unique_ptr 的类的复制构造函数

c++ - YouCompleteMe,头文件

c++ - 如何在不使用 goto 的情况下重写它

random - 如何在 Elixir 中生成随机数?

c - C语言中如何检查除法的结果是否为整数?

JavaScript 开关盒?

c - 为什么下面的代码给出了第一个手机号码。不论名字

strings.Contains 在 switch-case GoLang 中

C++ Xcode lldb 错误 : loops never work