[英]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.