-1

我如何编写一个小型计算器,将四个算术运算之一作为输入,这些运算的两个参数,然后打印出结果?就这么简单,我不需要真正的计算器。

这是我到目前为止尝试过的,但是它没有用:

#include <iostream>
#include <string>

using namespace std;

int main()
{
  int  x,y,result;
  string arithmatic;
  cout<<"enter the first number:";
  cin>>x;
  cout<<"enter the second number:";
  cin>>y;
  cout<<"use one of the four artimatic operations /, *, + or - :";
  cin>>arithmatic;
  if (arithmatic=="/" )
    result=x/y;
  cout<<"x / y ="<<result;
  if  (arithmatic == "*")
    result=x*y;
  cout<<"x * y ="<<result;
  if (arithmatic == "+")
    result = x + y;
  cout<<"x+y ="<<result;
  if (arithmatic == "-")
    result = x-y;
  cout<<"x-y ="<<result;
  else
  cout<<"what is this? i said use arithmatic operations!";

  return 0;
}

我知道这个程序有很多问题,我刚开始学习,而且这种做法在一本书中。

4

3 回答 3

2

无论这是否是请求的操作,您总是将结果写入控制台。

if (arithmatic =="/")
    result=x/y;
cout<<"x / y ="<<result;
if (arithmatic == "*")
    result=x*y;
cout<<"x * y ="<<result;
...

它应该是:

if (arithmatic =="/") {
    result=x/y;
    cout<<"x / y ="<<result;
}
if (arithmatic == "*") {
    result=x*y;
    cout<<"x * y ="<<result;
}
...

此外,由于案例是排他的,您应该else if在连续的块中使用。另一种选择是使用switch (...) { case ... },但是它对整数值(如单个字符)进行操作。取字符串的第一个字符来应用这个方法:

switch (arithmatic.at(0)) {
    case '/':
        result = x / y;
        break;
    case '*':
        result = x * y;
        break;
    case '+':
        result = x + y;
        break;
    case '-':
        result = x - y;
        break;
    default:
        cout << "what is this? i said use arithmatic operations!" << endl;
        exit(1); // abort execution
}
cout << "x " << arithmatic << " y = " << result << endl;

此外,您应该考虑到您当前仅对整数进行操作。不仅输入不能是任何小数,而且你正在做整数除法,即使它必须被四舍五入(在这种情况下,它被四舍五入)也会产生一个整数。为了解决这个问题,使用double类型而不是int操作数以获得良好的准确性(大约 17 个有意义的十进制数字可能与double)。

请注意,你拼错了算术。我在上面的代码中使用了错误的拼写。

于 2013-01-31T20:34:29.277 回答
1

几个问题:

  • 您的if陈述之间缺少很多大括号。这导致在std::cout整个代码中被多次调用。
  • 您正在使用许多if由单个else,终止的语句来if else if else代替。
  • 您使用的是整数除法而不是浮点除法。如果您想要“准确”的结果,请改用浮点数。
于 2013-01-31T20:33:53.937 回答
1

else只是在最后晃来晃去。它必须有一个if声明。写这种东西的通常方式是

if (first)
  do_first();
else if (second)
  do_second();
else if (third)
  do_third();
else
  do_everything_else();

现在你的练习是将这个结构与@leemes 向你展示的大括号结合起来。

于 2013-01-31T20:37:22.470 回答