2013-06-06 55 views
1

這是一個練習原理和實踐使用C++來製作一個基本的貨幣轉換器,使用if檢查然後用轉換器重新制作它。除了我的中間開關外,一切都運行得很好。它似乎沒有像其他程序一樣工作。其他的一個都沒問題,我輸入數據如111y,111p,但使用歐元時需要一個空格,否則它會轉到默認開關。我做了一個突破點,貨幣沒有被設置爲e或E,而且只有歐元!超級簡單的貨幣換算開關奇怪地行事?

我希望這不是什麼太傻,但它讓我困惑了Bjarne不解釋這一個:PI沒有#包括的iostream的代碼,因爲這一切都與* std_lib_facilities *只想處理說,之前有人指出它XD

#include "std_lib_facilities.h" 

using namespace std; 

int main() 
{ 
    double dollar = 0; 
    char currency = ' '; 
    const double yen = 0.010; 
    const double euro = 1.31; 
    const double pound = 0.65; 
    double sum = 0; 

    cout << "Please enter amount and Y for yen or E for Euro or P for pound.\n"; 
    cin >> dollar >> currency; 

    switch(currency) 
    { 
     case 'Y': case'y': 
     { 
      sum = dollar * yen; 
      cout << dollar << " is equal to " << sum << " yen.\n"; 
      break; 
     } 
     case 'E': case'e': 
     { 
      sum = dollar * euro; 
      cout << dollar << " is equal to " << sum << " euro.\n"; 
      break; 
     } 
     case 'P': case'p': 
     { 
      sum = dollar * yen; 
      cout << dollar << " is equal to " << sum << " pound.\n"; 
      break; 
     } 
     default: 
      cout << "Wrong values...\n"; 
      break; 
    } 
    keep_window_open(); 
    return 0; 
} 

回答

2

由於dollardouble,則Ee被解釋爲,當你提取它的數量(如在2e-2)的指數的一部分。由於後面沒有數字,因此提取未完成,並且cin進入fail狀態。然後跳過currency的讀取,從未將其從' '的初始值改變。當您輸入空格時,提取dollar結束於該空間,並按預期讀取currency

要修復它,你可以嘗試幾件事情。您可以在需要金額與貨幣指標之間的空格。你可以把它作爲一個字符串讀取,並嘗試自己解析它。你可以選擇一個不同的歐元符號。

無論如何,您應該在完成讀取後檢查cin的狀態。

+0

所以它基本上是保留另一個用途。很高興知道,謝謝! –