2015-01-14 93 views
1

我正在做貨幣兌換練習。計劃應讀取貨幣形式輸入流的數量和名稱,並以本國貨幣返回其值。std :: cin雙字符串

double amount = 0.0; 
std::string currency = " "; 

std::cout << "Please enter amount and currency ('usd','eur' or 'rub'):" << std::endl; 
std::cin >> amount >> currency; 
std::cout << amount << currency << std::endl; 

if (currency == "usd") { 
    ...; 
} else if (currency == "eur") { 
    ...; 
} else if (currency == "rub") { 
    ...; 
} else { 
    std::cout << "Input error: unknown currency..." << std::endl; 
} 

我在這個程序中遇到了std :: cin奇怪的問題。當輸入「100usd」或「100rub」時,程序分別回顯「100usd」或「100rub」並繼續正常工作。但是當我輸入「100eur」時,它會迴應「0」併發出「輸入錯誤...」行。與此同時,我應該輸入「100歐元」,該計劃迴應「100歐元」並且工作正常。在前兩種情況下,如果我輸入空白或不輸入就沒有區別。

我在做什麼錯?

+6

這就是因爲你可以用科學記數法(它涉及字母e)寫一個double,但eur中的其他字母對此無效,所以解析失敗。 – Borgleader

+1

這是(除其他外)爲什麼你不使用'std :: istream :: operator >>'而是'std :: getline',然後**自己解析輸入。**另外,不要使用浮動因爲它是不準確的,因此爲了貨幣點數。 –

+0

@ TheParamagneticCroissant:「不要用浮點數來賺錢」 - 爲什麼不呢?如果您正在處理真實的交易,或者有其他理由需要確切的表述,這只是一個問題。 –

回答

5

在100eur的情況下,它認爲你試圖用科學計數法寫一個雙精度型:1.0e-10,但是沒有解析其餘部分(因爲你對指數「部分」無效)。

在其他情況下,它停在100(當它到達u/r時),這對double有效,所以解析成功。

+0

謝謝,現在看起來很明顯) –