我想在給出意外輸入時測試std::cin
的行爲。爲什麼std::cin
以非確定性方式返回0和2.07386e-317?std :: cin對於意外輸入的行爲
#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
我看着the November 2014 working draft of current standart (C++14),不能看到這在§27.4.2,其中窄流對象在解釋任何有用的信息一個令人驚訝的短路。我期望看到std::cin
的內部工作細節。我錯過了什麼嗎?
我很好奇行爲的原因。感謝幫助。
使用不確定的未初始化的非靜態局部變量的值不好。嘗試初始化變量,[你會看到](http://melpon.org/wandbox/permlink/peBxVVt3QD7lvLpJ)用於初始化出現的數字。 – MikeCAT
@MikeCAT將所有變量設置爲靜態,並將所有輸出視爲0,作爲其初始值。那麼,看到以前的值是0還是2.07353e-317,這是巧合嗎?謝謝。 – oguzhanunlu
你有沒有使''和'宏(&&)'? –