我正在做貨幣兌換練習。計劃應讀取貨幣形式輸入流的數量和名稱,並以本國貨幣返回其值。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歐元」並且工作正常。在前兩種情況下,如果我輸入空白或不輸入就沒有區別。
我在做什麼錯?
這就是因爲你可以用科學記數法(它涉及字母e)寫一個double,但eur中的其他字母對此無效,所以解析失敗。 – Borgleader
這是(除其他外)爲什麼你不使用'std :: istream :: operator >>'而是'std :: getline',然後**自己解析輸入。**另外,不要使用浮動因爲它是不準確的,因此爲了貨幣點數。 –
@ TheParamagneticCroissant:「不要用浮點數來賺錢」 - 爲什麼不呢?如果您正在處理真實的交易,或者有其他理由需要確切的表述,這只是一個問題。 –