То, что вы, по сути, просите, - это способность делать eval. Некоторые динамические языки (python и т. Д.) Поддерживают его, но не поддерживают C. Даже если поддерживается eval, вам все равно необходимо выполнить проверку ввода по соображениям безопасности.
Следующий код C делает это с абстракцией и таблицей отправки:
#include <stdio.h>
typedef int (*func)(int op1, int op2);
struct op {
char *opstr;
func op_func;
};
int add_func(int op1, int op2)
{
return op1 + op2;
}
int sub_func(int op1, int op2)
{
return op1 - op2;
}
struct op ops[] = { {"+", add_func}, {"-", sub_func} };
int main (int argc, char const* argv[])
{
int x = 10, y = 5, i = 0;
char op[10];
scanf("%s", &op);
for(i = 0; i < sizeof(ops)/sizeof(ops[0]); i++){
if(strcmp(ops[i].opstr, op) == 0){
printf("%d\n", ops[i].op_func(x, y));
break;
}
}
}