有关ignore的问题

在C++学习中遇到的问题

#include <iostream>
using namespace std;
int main(){
    char a;
    cin.get(a);
    while(isalpha(a)){
        switch(a){
            case 'a':
                cout<<"A"<<endl;
                break;
            case 'b':
                cout<<"B"<<endl;
            default:
                cout<<"C"<<endl;
                cin.ignore();
        }
        cin.get(a);
    }
    return 0;
}

为什么在用cin.get输入时,在default里面加入cin.ignore(),
case ‘a’中的break就可以对while生效

img

如果换掉cin.get(),用cin输入,整个循环就会无限重复

img

实际上不是break将while退出了,而是不满足while循环条件退出的。
第一次你那里是cin.get()时,输入第一个b实际上是b和回车符号,b被赋值给a,回车被ignore忽略了,后面也是如此,直到输入a和回车符号,此时a被赋值给变量a,然后break退出了switch,回车符号再次赋值给变量a,不满则while循环的条件,所以退出循环。另外,cin >> a会忽略回车,所以才会无限循环