C++ 计算类型基于opt的值。我的代码如下,它不工作

C++ 计算类型基于opt的值。我的代码如下,它不工作,c++,C++,计算类型基于opt的值: 0:求和 1:减法 2:乘法 3:分部 我不知道我做错了什么,因为我的电脑坏了。请帮我指出 #include <iostream> #include <fstream> using namespace std; int add(int a, int b) { return a + b; } int minus(int a, int b) { return a - b; } int multiply(in

计算类型基于opt的值:

  • 0:求和
  • 1:减法
  • 2:乘法
  • 3:分部
我不知道我做错了什么,因为我的电脑坏了。请帮我指出

 #include <iostream>
 #include <fstream>
 
 using namespace std;
 int add(int a, int b) {
     return a + b;
 }
 int minus(int a, int b) {
     return a - b;
 }
 int multiply(int a, int b) {
     return a * b;
 }
 int divide(int a, int b) {
     return a / b;
 }
 void calculate(int a, int b, int opt)
 {
     int (*myfunc)(int, int);
     switch(opt){
     case 0: add(a,b); break;
     case 1: minus(a,b);break;
     case 2: multiply(a,b);break;
     case 3: divide(a,b);break;
     }

     int ans = (*myfunc)(a, b);
     printf("Output of calculation is %d.\n", ans);
 }
 int main() {
     calculate(1,2,1);
     return 0;
 }
#包括
#包括
使用名称空间std;
整数相加(整数a,整数b){
返回a+b;
}
整数减(整数a,整数b){
返回a-b;
}
整数乘法(整数a,整数b){
返回a*b;
}
整数除法(整数a,整数b){
返回a/b;
}
无效计算(整数a、整数b、整数opt)
{
int(*myfunc)(int,int);
开关(opt){
案例0:添加(a,b);中断;
案例1:负(a,b);中断;
案例2:乘法(a,b);中断;
案例3:分割(a,b);中断;
}
int ans=(*myfunc)(a,b);
printf(“计算输出为%d.\n”,ans);
}
int main(){
计算(1,2,1);
返回0;
}
@Ori

下面提到的正确代码。我希望它对你有用

 #include <iostream>
 #include <fstream>
 
 using namespace std;
 
 int add(int a, int b) {
     return a + b;
 }
 int minus_op(int a, int b) {
     return a - b;
 }
 int multiply(int a, int b) {
     return a * b;
 }
 int divide(int a, int b) {
     return a / b;
 }
 void calculate(int a, int b, int opt)
 {
    int (*myfunc)(int, int);
    int ans = 0;

     switch(opt){
        case 0: {
                    myfunc = add; 
                    break;
                }  
        case 1: 
                {
                        myfunc = minus_op;
                        break;
                }
        case 2: 
                {
                    myfunc = multiply;
                    break;
                }
        case 3: 
                {
                    myfunc = divide;
                    break;
                }
        default:
                {
                    printf("Unknown option \n");
                    goto error;
                }
     }

    ans = myfunc(a, b);
    printf("Output of calculation is %d.\n", ans);

    error:
        return ;
 }
 int main() {

    calculate(1, 2, 1);
    return 0;

 }
#包括
#包括
使用名称空间std;
整数相加(整数a,整数b){
返回a+b;
}
整数减去整数运算(整数a,整数b){
返回a-b;
}
整数乘法(整数a,整数b){
返回a*b;
}
整数除法(整数a,整数b){
返回a/b;
}
无效计算(整数a、整数b、整数opt)
{
int(*myfunc)(int,int);
int ans=0;
开关(opt){
案例0:{
myfunc=add;
打破
}  
案例1:
{
myfunc=负的运算;
打破
}
案例2:
{
myfunc=乘法;
打破
}
案例3:
{
myfunc=除法;
打破
}
违约:
{
printf(“未知选项”);
转到错误;
}
}
ans=myfunc(a,b);
printf(“计算输出为%d.\n”,ans);
错误:
返回;
}
int main(){
计算(1,2,1);
返回0;
}

您的程序显示未定义的行为,通过访问未初始化的变量
myfunc
您永远不会定义
myfunc
,您只需继续调用
add
之类的函数即可。你是说
myfunc=add
?如果是这样的话,为什么不直接创建一个数组,比如
{加、减、乘、除}
,然后根据索引调用函数呢?@tadman非常感谢。