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

uninitialized local variable bypassing cin statement

考虑以下代码:

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

输出为:

0

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

逻辑非运算符 ! 的优先级高于移位运算符 >>。如果cin不处于错误状态,当n为零时,!cin将变为false并且!cin>>n将为零。使用括号检查读取是否成功。我猜 n 恰好是零。

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