【问题标题】:C++ calculator that reads from left to right and contains +,-,/,*从左到右读取并包含 +、-、/、* 的 C++ 计算器
【发布时间】:2016-02-16 03:46:22
【问题描述】:

我需要制作一个运行单行输入并从左到右读取它的 c++ 程序。在输入结束时,用户添加 # 表示输入完成。我让计算器工作,但是如果用户只输入 # 并点击进入程序需要能够抛出错误代码。否则我们可以假设用户输入正确。这是我到目前为止的代码。

#include <iostream>
#include <cstdlib>


using namespace std;

int main()
{
    int var1, var2, total;
    char operation;
    cout << "Enter an equation: ";
    cin >> var1;
    /*if (var1 == 0)
    {
        cout << "error";// cant pass in info via char because var1 is
        return 1;       // in the way and using var == 0 technique is
        *               // cheating because then you can't do 0#
    */ 
    else
    {
        do
        {
            cin >> operation;
            if (operation == '#')
            {
                cout << var1;
            }
            else
            {
                cin >> var2;
            }
            if(operation == '+')
            total = var1 + var2;
            else if(operation == '-')
            total = var1 - var2;
            else if(operation == '/')
            total = var1 / var2;
            else if(operation == '*')
            total = var1 * var2;
            var1 = total;
        }while (operation != '#');
    }
    return 0;
}

问题是我知道我需要先运行 cin var 1 才能执行任何其他操作。无论如何,我是否可以在不更改输入的情况下获取输入的第一个字符?我真的不知道还能做什么。如果有什么需要澄清的,请询问。

【问题讨论】:

    标签: c++ calculator


    【解决方案1】:

    一种更简单的方法是验证用户的输入。因此,如果您只接受“+-*/”,那么我建议您创建一个返回错误的检查函数,例如:

    bool check(char x)
    {
    if (x == '+' || x == '-' || x == '*' || x == '/');
    else return false;
    }
    
    int main()
    {
     float total;
     int var1, var2;
     char operation;
    
    //input
    do
    {
        cout << "Enter an equation: ";
        cin >> var1>> operation>>var2;
        if (check(operation) == false)
            cout << "Error! Unidentified operation symbol..." << endl;
    } while (check(operation) == false);
    
    
    //Process
    if (operation == '+')
        total = var1 + var2;
    else if (operation == '-')
        total = var1 - var2;
    else if (operation == '/')
        total = var1 / var2;
    else if (operation == '*')
        total = var1 * var2;
    
    //output
    cout << total << endl;
    
    system("pause");
    return 0;
    }
    

    希望这会有所帮助:)

    【讨论】:

      【解决方案2】:

      为什么不使用分流码算法的反向波兰符号。你可以用它轻松解决这个数学表达式计算。如果你需要我可以提供来源。但它是用java编写的

      我已将源文件上传到我的驱动器。请点击此链接https://drive.google.com/folderview?id=0BxH1JbPpi3XKNWxXeW91VEFGY1E&usp=sharing

      【讨论】:

      • 我会很感激,我可以转换它。
      猜你喜欢
      • 2021-02-09
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-01
      • 2015-06-18
      • 1970-01-01
      相关资源
      最近更新 更多