如何用C ++语言编写一个小型计算器?

时间:2013-01-31 20:16:38

标签: c++ calculator

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

这是我到目前为止所尝试的内容,但是它不起作用:

#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;
}

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

3 个答案:

答案 0 :(得分: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以获得良好的准确性(double可能有大约17个有意义的十进制数字。)

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

答案 1 :(得分:1)

几个问题:

  • 你在if陈述之间遗漏了很多大括号。这导致在整个代码中多次调用std::cout
  • 您使用了很多由if终止的else语句,而是使用if else if else
  • 您使用整数除法而不是浮点除法。如果您想要“准确”结果,请使用浮点数。

答案 2 :(得分:1)

else最后只是晃来晃去。必须使用if语句。通常的写作方式是

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

现在,您的练习是将此结构与@leemes向您展示的大括号结合起来。