C++ 为什么常量字符会打断循环和开关语句
我正在使用switch语句制作一个简单的货币转换程序,如下所示:C++ 为什么常量字符会打断循环和开关语句,c++,char,switch-statement,constants,C++,Char,Switch Statement,Constants,我正在使用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 doub
#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;
}
#包括“library/std_lib_facilities.h”
int main()
{//这个程序将日元、欧元、人民币、克朗和英镑转换成美元
双倍金额=0;
字符货币=“”;
//每种货币一美元等值
恒生双日元兑美元=113.67;
常数双英镑对美元=0.85;
康斯特双倍欧元兑美元=0.95;
康斯特双元兑美元=6.87;
常数双倍克朗兑美元=7.04;
//对应于货币的大小写标签
常量字符y='y',p='p',e='e',u='u',k='k';
现金>金额>>货币){
交换机(货币){
案例y:
CUT< P>这可能不是,但是输入的“23.4e”值被解释为指数吗?这将是我的想法。你可以考虑解析它,将字符串/ char部分首先移到变量的那个部分。 < P>这可能不是,而是输入的“23.4e”。值被解释为一个指数?这将是我的想法。你可以考虑把它删除字符串/ char部分第一部分到你的变量中。没有<代码>情况:E<代码>代码,不会编译,因为你仍然有<代码>:S/<代码>但不是<代码> S/<代码>,只有<代码> e <代码>。请确定COD。e you show复制了您描述的行为。这是一个错误。我用案例s测试了它,它成功了。当我问这个问题时,我忘了回到案例e。现在我编辑了案例e。它仍然打破了循环,切换语句我认为这就是问题所在。24y
或24y
有效。但是1e
不会工作,但1e
工作。似乎编译器解释1e
的方式不同于它解释1y
的方式?@onomosetu1e
被解析为一个数字,因为e
是一个指数。对于1y
,只有1
被解析为一个数字,y
被解析为char>case:e
该代码无法编译,因为您仍然定义了case:s
,但未定义s
,仅定义了e
。请确保您显示的代码再现了您描述的行为。这是一个错误。我使用case s对其进行了测试,结果有效。当我问这个问题时,我忘了返回到case。现在已编辑到case。它仍然打破循环并切换语句。我认为这就是问题所在。24y
或24y
有效。但是1e
无效,但1e
有效。编译器对1e
的解释似乎与对1y
的解释不同。@onomostu1e
被解析为数字,因为see
是一个指数。对于1y
,只有1
被解析为一个数字,y
被解析为char
。谢谢。这就是问题所在。我认为编译器将1e
作为指数来读取,而不是它如何读取1y
。当我使用1e
进行测试时,它会输出正确的结果。请问为什么会这样接受1y
和1y
输入,即使前者没有空格?每个格式化的输入操作都跳过任何前导空格。数字可以有e
字符,如1.535625e+009
等,它表示指数,因此可以生成一个“数字”从一个字符串中包含一个。看看解析和C++来理解这个。有很多信息。谢谢。这是问题。我认为编译器读取代码< 1E < /代码>作为一个指数,而不是它如何读取代码> 1y<代码>。当我用<代码> 1 E<代码>测试时,它输出正确的结果。我能问为什么它同时接受代码< 1y>代码>d1 y
输入,即使前者没有空格?每个格式化的输入操作都跳过任何前导空格。数字可以有e
字符,如1.535625e+009
等,它表示指数,因此可以生成“数字”从一个包含一个字符串。看解析和C++理解这个-有很多关于THT的信息。