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

时间:2016-06-24 16:02:15

标签: c++ variables c++11 cin

请考虑以下代码:

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

输出结果为:

0

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

1 个答案:

答案 0 :(得分:12)

逻辑NOT运算符!的优先级高于按位运算符>>。如果cin未处于错误状态,!cin将变为false,而当!cin>>n为零时,n将为零。使用括号检查读数是否成功。我猜n碰巧是零。

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