未初始化的局部变量绕过cin语句

dlp*_*hla 3 c++ variables cin c++11

请考虑以下代码:

int n;
if(!cin>>n)
{
    cin.clear();
    while(cin.get()!='\n')
        continue;
}
cout<<n;
Run Code Online (Sandbox Code Playgroud)

输出是:

0
Run Code Online (Sandbox Code Playgroud)

为什么终端上没有任何提示键入输入值n?为什么未初始化n0自动设置?

Mik*_*CAT 12

Logic NOT运算符的!优先级高于按位移位运算符>>.如果cin不是处于错误状态,!cin将成为false!cin>>n将为零时n是零.使用括号检查读数是否成功.我想n碰巧是零.

int n;
if(!(cin>>n))
{
    cin.clear();
    while(cin.get()!='\n')
        continue;
}
cout<<n;
Run Code Online (Sandbox Code Playgroud)