簡體   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