#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;
}