输入的两个需要计算的数从控制台输入,如果用函数模板,但是在main里输入的时候不知道类型,怎么解决

四则运算
两种方法设计程序,从键盘输入任意两个数和一个运算符(+、-、*、/),计算其运算的结果并输出。考虑整型、小数等不同类型数的四则运算。
方法1函数原型:bool calc(int&result, int a, int b, char type);
bool calc(double&result, double a, double b, char type);
方法2函数模板原型:
template
bool calc(T&result,T a,T b, char type);

方法1的程序设计:

#include <iostream>
using namespace std;

bool calc(int& result, int a, int b, char type) {
    switch(type) {
        case '+':
            result = a + b;
            break;
        case '-':
            result = a - b;
            break;
        case '*':
            result = a * b;
            break;
        case '/':
            if (b == 0) {
                cout << "Error: divide by zero" << endl;
                return false;
            }
            result = a / b;
            break;
        default:
            cout << "Error: invalid operator" << endl;
            return false;
    }
    return true;
}

bool calc(double& result, double a, double b, char type) {
    switch(type) {
        case '+':
            result = a + b;
            break;
        case '-':
            result = a - b;
            break;
        case '*':
            result = a * b;
            break;
        case '/':
            if (b == 0) {
                cout << "Error: divide by zero" << endl;
                return false;
            }
            result = a / b;
            break;
        default:
            cout << "Error: invalid operator" << endl;
            return false;
    }
    return true;
}

int main() {
    int a, b, int_result;
    double double_a, double_b, double_result;
    char type;

    cout << "Enter two integers: ";
    cin >> a >> b;
    cout << "Enter an operator (+, -, *, /): ";
    cin >> type;

    if (calc(int_result, a, b, type)) {
        cout << "Result (integer): " << int_result << endl;
    }

    cout << "Enter two doubles: ";
    cin >> double_a >> double_b;
    cout << "Enter an operator (+, -, *, /): ";
    cin >> type;

    if (calc(double_result, double_a, double_b, type)) {
        cout << "Result (double): " << double_result << endl;
    }

    return 0;
}

方法2的程序设计:

#include <iostream>
using namespace std;

template <typename T>
bool calc(T& result, T a, T b, char type) {
    switch(type) {
        case '+':
            result = a + b;
            break;
        case '-':
            result = a - b;
            break;
        case '*':
            result = a * b;
            break;
        case '/':
            if (b == 0) {
                cout << "Error: divide by zero" << endl;
                return false;
            }
            result = a / b;
            break;
        default:
            cout << "Error: invalid operator" << endl;
            return false;
    }
    return true;
}

int main() {
    int int_a, int_b, int_result;
    double double_a, double_b, double_result;
    char type;

    cout << "Enter two integers: ";
    cin >> int_a >> int_b;
    cout << "Enter an operator (+, -, *, /): ";
    cin >> type;

    if (calc(int_result, int_a, int_b, type)) {
        cout << "Result (integer): " << int_result << endl;
    }

    cout << "Enter two doubles: ";
    cin >> double_a >> double_b;
    cout << "Enter an operator (+, -, *, /): ";
    cin >> type;

    if (calc(double_result, double_a, double_b, type)) {
        cout << "Result (double): " << double_result << endl;
    }

    return 0;
}

使用字符数组接受输入,然后遍历这个数组,根据内容判断是数值还是运算符。
我的这篇文章有四则运算,不过没有小数,不过稍微变一下就行,有多位数字、包括负数的判断,可以在这里加入对小数点的判断。
栈和队列:理解与使用_创意程序员的博客-CSDN博客
要参考的案例为链式栈四则运算,参考这里添加对小数点的判断,并设置isOperand = 1;

img

img

  • 以下回答由chatgpt基于相关博客总结生成:

    我可以解决第一个问题。

    这个问题可以通过使用函数模板和C++的泛型编程来解决。通过使用模板,可以在不知道具体类型的情况下,对不同类型的数据进行相同的操作。

    以下是使用函数模板实现的代码:

    #include<iostream>
    using namespace std;
    
    template<typename T>
    T calculate(T a, T b, char op) {
        if(op == '+'){
            return a + b;
        }else if(op == '-'){
            return a - b;
        }else if(op == '*'){
            return a * b;
        }else if(op == '/'){
            if(b == 0){
                cout<<"Error: divide by zero"<<endl;
                return 0;
            }else{
                return a / b;
            }
        }else{
            cout<<"Error: invalid operator"<<endl;
            return 0;
        }
    }
    
    int main() {
        cout<<"Please input two numbers and an operator:"<<endl;
        cout<<"Number 1: ";
        float num1;
        cin>>num1;
        cout<<"Number 2: ";
        float num2;
        cin>>num2;
        cout<<"Operator: ";
        char op;
        cin>>op;
        cout<<"Result: "<<calculate(num1, num2, op)<<endl;
        return 0;
    }
    

    上面的代码中,calculate函数是一个模板函数,可以用于不同类型的数据。在函数中,根据输入的运算符进行不同的运算操作,并返回结果。

    在主函数中,先根据用户输入读取两个数和一个运算符,然后调用calculate函数进行计算,并输出结果。

    此外,如果除数为0或者运算符不合法,程序会输出错误信息。

    以上是使用函数模板实现的一种方法。如果要使用特定数据类型的函数来实现,则需要为不同的数据类型编写不同的函数,比较麻烦。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632