Тип вычисления основан на значении 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(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;
 }
  

Комментарии:

1. Ваша программа демонстрирует неопределенное поведение путем доступа к неинициализированной переменной myfunc

2. Вы никогда не определяете myfunc , вы просто продолжаете и вызываете такие вещи, как add . Вы имеете в виду myfunc = add ? Если да, то почему бы просто не создать подобный массив { add, minus, multiply, divide } , а затем вызвать функции на основе индекса?

3. @tadman Большое спасибо.

Ответ №1:

@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;

 }