绕过 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;
考虑以下代码:
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;