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

标签 c++ variables c++11 cin

考虑以下代码:

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

输出是:

0

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

最佳答案

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

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

关于c++ - 绕过 cin 语句的未初始化局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38017600/

相关文章:

c++ - 在 C++ 中访问静态变量

c++11 - 在具有复制和移动向量和复制赋值的 C++ 类中 : no need for move assignment?

c++ - 在 C++ 中调用函数有多少开销?

c++ - 在 ‘;’ token 之前预期为 ‘{’

python - 如何将文本小部件内容设置为 Python/Tkinter 中的变量值?

c++ - 生成 std​​::isalpha 计算结果为 true 的范围

c++ - nullptr 到底是什么?

C++ Vector,从另一个线程崩溃的 push_back?

c++ - MPI 代码在超过 2 个节点/进程的最终确定时挂起

c - 将可变数量的参数传递给 C 函数