C++矢量计算器

C++ Vector Calculator

本文关键字:计算器 C++      更新时间:2023-10-16

所以我决定接受挑战,用向量制作一个"无限"计算器我的计算器的目标是获得用户输入,并添加/sub/mult/div他输入的所有变量,而不是像大多数简单计算器那样只添加2个变量。我完成了大部分代码,除了它要求用户输入的部分。我不仅想把两个变量加在一起得到结果,我还想得到用户输入的变量数量,然后进行必要的数学运算得到结果。

我需要帮助的地方是user_input()函数。我写这行是为了让你知道我想要什么:

 std::cin >> v.push_back(user_value) >> user_symbol >> v.push_back(user_value);

但是,正如您所看到的,编译器会抛出错误。

error: no match for 'operator>>' in 'std::cin >> v.std::vector<_Tp, _Alloc>::push_back<int, std::allocator<int> >((*(const value_type*)(& user_value)))'|

此外,我知道这不是从用户那里获得2个以上值的正确方法,因为我只获得2个值,但我希望我的程序接收2个以上的值。。

p.S.对C++来说还是相当陌生的,如果你有任何技巧想分享,请随意:)

以下是完整的源代码:

// main.cpp
// calculator using vectors
#include <iostream>
#include <vector>
#include <stdexcept>
typedef std::vector<int>::size_type vc_size;
int add(std::vector<int> v_add);
int sub(std::vector<int> v_sub);
int mult(std::vector<int> v_mult);
int div(std::vector<int> v_div);
void p_info();
void user_info();
int main(){
    return 0;
}
int add(std::vector<int> v_add){
    vc_size vector_size = v_add.size();
    int add_result = v_add[0];
    for(int i = 1; i < vector_size; i++){
        add_result += v_add[i];
    }
    return add_result;
}
int sub(std::vector<int> v_sub){
    vc_size vector_size = v_sub.size();
    int sub_result = v_sub[0];
    for(int i = 1; i < vector_size; i++){
        sub_result -= v_sub[i];
    }
    return sub_result;
}
int mult(std::vector<int> v_mult){
    vc_size vector_size = v_mult.size();
    int mult_result = v_mult[0];
    for(int i = 1; i < vector_size; i++){
        mult_result *= v_mult[i];
    }
    return mult_result;
}
int div(std::vector<int> v_div){
    vc_size vector_size = v_div.size();
    int div_result = v_div[0];
    for(int i = 1; i < vector_size; i++){
        div_result /= v_div[i];
    }
    return div_result;
}
void p_info(){
    std::cout << "Vector calculating program" << std::endl;
    std::cout << "Calculate: ";
}
void user_info(){
    char user_symbol;
    int user_value;
    std::vector<int> v;
    std::cin >> v.push_back(user_value) >> user_symbol >> v.push_back(user_value);
    switch(user_symbol){
        case '+':
            std::cout << add(v);
            break;
        case '-':
            std::cout << sub(v);
            break;
        case '*':
            std::cout << mult(v);
            break;
        case '/':
            std::cout << div(v);
            break;
        default:
            throw std::runtime_error("Error");
    }
}

std::cin >> v.push_back(user_value)

你不能这样做。

你必须这样做,而不是

std::cin >> user_value;
v.push_back(user_value)

我想获得用户输入的尽可能多的变量,然后进行必要的数学运算以获得结果。

您希望用户如何发出停止信号?你可以通过一个循环很容易地实现这一点:

while(true) {
    std::cin >> user_value1 >> user_symbol >> user_value2;
    v.push_back(user_value1);
    v.push_back(user_value2);
    stop_condition...
    //rest of code
}