2017-02-26 64 views
0

我正在使用switch語句一個簡單的貨幣轉換程序,如下圖所示:爲什麼恆定的焦炭打破循環和switch語句

#include "library/std_lib_facilities.h" 

int main() 
{//This program converts yen, euros, yuan, kroner and pounds to dollars 
double amount = 0; 
char currency = ' '; 

//one dollar equivalent of each currency 
const double yen_to_dollar = 113.67; 
const double pounds_to_dollar = 0.85; 
const double euros_to_dollar = 0.95; 
const double yuan_to_dollar = 6.87; 
const double kroner_to_dollar = 7.04; 

//case labels corresponding to currency 
const char y = 'y', p = 'p', e = 'e', u = 'u', k = 'k'; 

cout << "Please type the amount you want to convert, followed by the currency(y,e,p,u,k) u is for yuan: "; 

while(cin >> amount >> currency) { 
    switch(currency) { 
     case y: 
      cout << amount << " yen == " << amount/yen_to_dollar << " dollars." << '\n'; 
      break; 

     case p: 
      cout << amount << " pounds == " << amount/pounds_to_dollar << " dollars." <<'\n'; 
      break; 

     case e: 
      cout << amount << " euros == " << amount/euros_to_dollar << " dollars." << '\n'; 
      break; 

     case u: 
      cout << amount << " yuan == " << amount/yuan_to_dollar << " dollars." << '\n'; 
      break; 

     case k: 
      cout << amount << " kroner == " << amount/kroner_to_dollar << " dollars." << '\n'; 
      break; 

     default: 
      cout << "Please try supported currencies" << '\n'; 
      break; 
    } 
} 

    return 0; 
} 

我可以預定義的貨幣轉換成美元時,該功能是通過輸入運行金額和貨幣,如下所示:5y(將5日元換算成等值美元)。 除了e常數外,其他數量和不變的工作。只要我想用一定數量和恆定的數字來測試代碼,代碼就會結束。 (24E)。

當我將常量e = 'e'更改爲s = 's'之類的東西時,效果很好。

所以我的問題是爲什麼包含e字符的輸入會破壞我的代碼?

+4

沒有'case:e' – user463035818

+0

代碼不會編譯,因爲您仍然有'case's''''''定義,只有'e'。請確保您顯示的代碼重現您描述的行爲。 – user463035818

+0

這是一個錯誤。我測試了它的情況下,它的工作。當我問這個問題時,我忘了回到案例e。已經編輯過現在的案例。它仍然打破了循環和切換語句 –

回答

3

這可能不是它,而是輸入的「23.4e」值被解釋爲指數?這將是我的想法。您可能會考慮解析它,首先將該字符串/ char部分移除到該部分的變量中。

+0

謝謝。這是問題。我認爲編譯器讀取'1e'作爲指數,而不是讀取'1y'。當我用'1 e'測試時,它會輸出正確的結果。我可以問爲什麼它接受'1y'和'1y'輸入,即使前者沒有空格? –

+2

每個格式化的輸入操作都跳過任何前導空格。 –

+0

數字可以像'1.535625e + 009'等那樣具有'e'字符,它表示一個指數,因此可以從包含一個字符串的字符串中產生一個「數字」。看看解析和C++來理解這一點 - 有很多關於這方面的信息。 –