2017-03-04 45 views
1

我有發現場景在執行下面的代碼塊如何在內部串/焦炭被存儲在int和float

#include <iostream> 
using namespace std; 
int main() 
{ 
    int input1; 
    float input2; 

    cout << "Enter a real number :"; 
    cin >> input1; 
    cout << "The int number is " << input1 << endl; 

    cout << "Enter another number :"; 
    cin >> input2; 
    cout << "The float number is " << input2 << endl; 
} 

用於上述的輸出是

Enter a real number :a 
The int number is -858993460 
Enter another number :a 
The float number is -1.07374e+08 

能任何人都會好好解釋上述場景在內部的處理方式,從而導致上述場景?

注意 -

  • 運行上面VS2015。

正如我剛剛嘗試使用C++,請指向任何參考,如果我錯過了這個過程。

+0

什麼是「輸入」?它沒有在你的例子中聲明。 – mpiatek

+1

你檢查了失敗位 - 它可能不是一個數字 –

+0

@mpiatek輸入在這兩種情況下都是'a',並且輸出對於int和float都是相同的,對於所有情況沒有任何改變 – sasuke

回答

4
int input1; 
float input2; 

在這一點上,無論是input1input2有不確定的值,因爲你沒有初始化。

std::cin期待中輸入一個整數,但你進入'a',這讓std::cinfail。該故障持續存在,直到failbit被清除,才能用std::cin執行提取操作。

輸入操作失敗後,input1input2仍然是「未定義」。打印它們會導致未定義的行爲。

+0

是的,你是對的,的確是正確的行爲,我用0初始化它們,現在輸出似乎是正確的,即使我給了一個錯誤的輸入。 感謝您的解釋。我會接受這個答案。 – sasuke

+0

使用'if(!cin)cout <<「failed」;'在'cin >> input'後面檢查'cin'確實失敗。 –

+0

@GauravSehgal感謝您的輸入......它按照您的說法工作。 – sasuke

2

當流不能被解釋爲適當類型的有效值時,提取操作符不會更改變量。因此,您會看到input1input2的未初始化值。您可以檢查cin上的failbit以查看提取操作符是否成功。

例如:

int input1; 
    cout << "Enter a real number :"; 
    cin >> input1; 
    if(cin.good()) 
    { 
     cout << "The int number is " << input1 << endl; 
    } 
    else 
    { 
     cout << "The input was not a number." << endl; 

     // skip to the end of the input 
     cin.clear(); 
     cin.ignore(INT_MAX, '\n'); 
    } 
+0

是的,它也可以按照您在這裏建議的方式處理。感謝您的迴應。 – sasuke