2014-09-21 101 views
0

我試着讓這段代碼在我的Xcode 6.01上工作。它是一個小程序,需要一些double和一個char,然後打印字符。用cin讀取字符(C++)

#include <iostream> 
using namespace std; 

int main() 
{ 

    char c=' '; 
    double d = 0; 


    cin >> d >> c; 

    cout << "The char is: "<< c; 

    return 0; 
} 

輸入 「2D」 的結果是:"The char is: Program ended with exit code: 0" 正如可以看到 「d」 中未示出。

如果我嘗試輸入「2m」它的作品。 (The char is: mProgram ended with exit code: 0)

任何人都可以幫忙嗎?

+0

一個空格,或者一個*宇宙飛船*可能?即嘗試'「2 d」'... – 2014-09-21 08:22:52

+0

問題是什麼? 「d」沒有顯示? – Grendizer 2014-09-21 08:23:42

+0

也考慮打印'd'的值。 – molbdnilo 2014-09-21 09:31:49

回答

0

問題1:當您向cin發送「2d」時,您只將輸入值分配給一個變量。如果要分配兩個變量(「2 d」)之間的空格,或者分別指定它們:輸入2,回車,輸入d,再次輸入。

問題2:cin不做類型檢查。當您將無效類型分配給double或int時,您將收到不良行爲。

如果您從代碼中刪除字符輸入,只有你輸入分配給雙d:

int main() 
{ 

    char c=' '; 
    double d = 0; 


    // cin >> d >> c; 
    cin >> d 
    // cout << "The char is: "<< c; 
    cout << "d = " << d << endl; 
    return 0; 
} 

對於輸入的2D:結果 - > d = 0
對於輸入2M:結果 - > d = 2
對於輸入1-20:結果 - > d = 2
對於輸入2A:結果 - > d = 0
對於輸入2P:結果 - > d = 0
對於輸入2Q:結果 - > d = 2

正如你所看到的,有時候cin不知道如何處理輸入,而完全忽略它。 有時cin可以識別輸入的數字部分並將其存儲在變量d中,並且如果在d後添加cin >> c,則會將其餘部分放在char c中。

更多的解釋和代碼示例:Using cin to get user input

+0

我對此感到困惑的原因是Strousrup在他自己關於C++編程和原理的書中繼續使用這種技術。對他來說顯然是有用的。我不知道他使用了哪個編譯器,也許這會產生變化。但是,謝謝,我會聽從你的建議。 – tja 2014-09-21 20:17:44

0

編譯代碼與海灣合作委員會,並預期該計劃將正常工作。

c >> d >> c; // d(雙)與c(char)分開