【问题标题】:simple currency converter using switch c++ [closed]使用switch c ++的简单货币转换器[关闭]
【发布时间】:2021-10-07 16:09:16
【问题描述】:

您好,我需要关于这个使用 switch 的简单计算器的帮助 当我输入我想转换成的货币然后输入金额之后什么都没有发生 .Ive 尝试使用 if 但我无法让它工作

#include <iostream>
using namespace std;

int main() {
  char zlote;
  char E, D, F;
  char euro;
  char dolar;
  char funt;
  char currency;

  E=euro*0.25;
  D=dolar*0.19;
  F=funt*0.22;

  cout << "what currency do you want to convert into  ?" << endl;
  cin >> currency;

  cout<<"Type in the amount you wish to convert"<<endl;
  cin >>zlote;

  switch (zlote) {
    
     {case 1 :
       cout<<zlote<<" zlote is equal "<<E<<" Euro"<<endl;
       break;}

      {case 2 :
      cout<< zlote<<" zlote is equal "<<D<<" Dolarow"<<endl;
      break;}

      {case 3 :
      cout<< zlote<<" zlote is equal "<<F<<" Funtow"<<endl;
      break;}
  }
      return 0;
}

【问题讨论】:

  • 欢迎来到 Stack Overflow!听起来您可能需要学习如何使用调试器来逐步执行代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。进一步阅读:How to debug small programsDebugging Guide
  • {case 1 : 应该是 {case '1' : 记住你是在比较字符。 1 与“1”不同
  • E=euro*0.25; 这永远不会好用。
  • 仅供参考,您不需要在箱子周围使用大括号。
  • 使用调试器也是不错的建议。很明显,您没有在调试器中逐行遍历代码,查看每一步的变量和流程。如果你这样做了,你会很容易发现其中的几个问题。

标签: c++ currency


【解决方案1】:

开关(zlote){

应该打开货币选择,而不是金额,对吧?这就是为什么什么都没有发生的原因。

但是您还有其他问题:您似乎在输入值之前就在计算东西!

我建议特别关注一个重要的代码审查问题,以防止该问题:不要将变量声明在一个集合的顶部;在第一次使用并准备好被赋予初始值时声明它们。

这些类型也没有任何意义。为什么要将字符乘以浮点数? 阅读警告;他们实际上是在告诉你一些事情。

即使你使用了正确的变量,你的 switch 也不会起作用,因为你读取了 char 但你正在打开一个数值,所以这将是字符代码:'1' 不一样如1(如果没记错的话实际上是49)。

【讨论】:

  • 也从未输入过eurodolarfunt,而是用这些来计算EDF而不是zlote有金额。
  • 是的,“在你输入值之前似乎在计算东西!”
  • 我认为它略有不同,因为这些值从未输入过。如果公式使用zlote 我不会评论。无论哪种方式,您都得到了我的 +1,因为它涵盖了问题。
  • 略...我在看到他们从不输入之前发表了评论;只是到那时他们还没有被输入。不过,“之前”是要学习的关键;仅仅因为它是“从不”并没有错,因为添加它但稍后不会修复它。例如,习惯于电子表格的人可能不知道命令是按顺序发出的。至少,我只能想象为什么会发生在某些新人身上。
【解决方案2】:

试试 使用案例E 而不是案例1
使用案例D 而不是案例2
使用案例F 而不是案例3
此外,当您从用户那里获取输入时,请确保您输入的字母为大写

【讨论】:

  • 为什么是这样的解决方案?
  • 因为您将字符作为输入,并且在上面的代码中,您将字符与 Switch 语句中的数字进行比较,这不起作用。看看这个链接educative.io/edpresso/how-to-use-the-switch-statement-in-c
  • 您可以使用case '1':,但程序应该指出有效的选择。
  • 这只是众多问题之一。
【解决方案3】:

在您的代码中存在不同的问题。我列出了不同的问题并公开了不同的解决方案:

问题 1-您正在声明所有类型为 char 的变量。 char 类型只存储一个字节,不能对小数或整数进行操作。

2 - 您正在使用不同的变量来保存用户输入并计算函数中的转换。

3- 您具有在用户输入之前转换货币类型的功能。这是个问题,因为没有数量就无法计算转化率。

4 - 开关没有正确的变量来选择这种情况。

解决方案

1 - 我建议您在 C++ 文档中搜索不同类型的变量以及可以在其中存储的内容。 我使用 float 类型,因为可以使用小数进行操作,但您可以使用 double 或 long 等不同类型。

2 - 如果您要求用户输入,我建议您使用相同的变量来计算转换,但您可以使用另一个变量,并且在转换函数之前等于这两个变量。

3 - 函数必须位于请求输入之后或在 swtich 中计算每个 case 内的转换。

4 - siwtch 需要与案例标识符相同类型的变量。 如果你把数字前。 1,2,3 你需要放一个整型变量。

改进 您可以改进检查输入数据的代码,因为如果用户指定未在 siwtch 中定义的选项,则您的代码不会打印任何思考输出。 您可以在 siwtch 中添加默认大小写。对于这种情况。

我附上查看switch功能的链接:

https://www.w3schools.com/cpp/cpp_switch.asp

float zlote;
float E, D, F;  
int currency;
cout << "what currency do you want to convert into  ?" << endl;
cin >> currency;

cout<<"Type in the amount you wish to convert"<<endl;
cin >>zlote;

   E=zlote*0.25;
   D=zlote*0.19;
   F=zlote*0.22;

   switch (currency)

   {

       {case 1 :
         cout<<zlote<<" zlote is equal "<<E<<" Euro"<<endl;
         break;}

        {case 2 :
        cout<< zlote<<" zlote is equal "<<D<<" Dolarow"<<endl;
        break;}

        {case 3 :
        cout<< zlote<<" zlote is equal "<<F<<" Funtow"<<endl;
        break;}


   }

【讨论】:

  • 您解决了一个问题,但问题不止一个。
  • 是的,变量类型不正确。
  • 你还应该解释你做了什么改变以及为什么。
  • 我和@drescherjm 在一起,没有任何解释的仅代码答案几乎没用。
  • 我可以接受一个只关注一个问题的答案,但它需要得到很好的解释。解释问题以及为什么是问题什么问题。解释解决方案及其工作原理。如果有多种可行的解决方案,则值得解释为什么一种解决方案比其他解决方案更可取。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 2013-11-12
相关资源
最近更新 更多