繁体   English   中英

std :: cin对于意外输入的行为

[英]Behavior of std::cin for unexpected inputs

当给出意外输入时,我想测试std::cin行为。 为什么std::cin以不确定的方式返回0和2.07386e-317?

#include <iostream>

using namespace std;

int main(){
    double foo, bar;
    while(cin.good() and cin >> foo >> bar){    
        cout << foo << " " << bar << endl;
    }
    if (cin.eof()){
            cout << "Ooops, EOF encountered.\n";
    }
    else{
        cout << "Something weird happened!\n";
        cout << foo << " " << bar << endl;
    }
    return 0;
}

每当我输入

 <a_number> <non-number>

输出为<a_number> 0

每当我打字时

<non-number> <anything>

输出为0 2.07386e-317


我通过将输入数量增加到3来尝试了确切的代码,

<non-number> <non-number> <non-number>

输出为0 0 2.07353e-317


对于4个输入,

`<non-number> <non-number> <non-number> <non-number>`

输出为0 2.07353e-317 0 2.07353e-317


最后,对于5个输入,

`<non-number> <non-number> <non-number> <non-number> <non-number>`

输出为0 2.07353e-317 2.07353e-317 0 2.07353e-317

我查看了当前标准(C ++ 14)的2014年11月工作草案,在§27.4.2上看不到任何有用的信息,在该文章中以狭窄的方式解释了窄流对象。 我希望看到std::cin内部工作细节。 我想念什么吗?

我对行为的原因感到好奇。 感谢帮助。

在“发生某些奇怪的情况”的情况下,您不应尝试打印变量,因为这意味着变量提取不成功。 从第一个错误输入开始的任何变量都不会被分配。

有关如何跳过错误输入的信息,请参见如何测试stringstream运算符>>是否已解析错误类型并跳过它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM