1

编译器有没有办法将运算符视为 +、-、/ 或 * 的真正含义?下面不起作用。

#include <stdio.h>

int main(void) {

int number1=10, number2=5;
char operator;
int result=0;

printf("Enter Operator ");
scanf("%c",&operator);

if (operator=='+')
result=number1+operator+number2;

printf("%d",result);


}
4

6 回答 6

3

这个:

result=number1+operator+number2;

永远不会C像你想象的那样工作。当您实际添加asciito+和.number1number2

所以,我想做以下事情:

switch(operator){
    case '+':
        result = number1 + number2;
        break;
    case '-':
        result = number1 - number2;
        break;
    case '*':
        result = number1 * number2;
        break;
    case '/':
        result = number1 / number2;
        break;
    default:
        puts("Incorrect operator");
}

这将允许获得正确的结果。

于 2013-04-21T12:30:26.447 回答
2

不,C 不是 JavaScript。它没有运行时评估功能。如果你想解析和评估数学表达式,那么你必须做一些更复杂的事情,就像这个人所做的那样

于 2013-04-21T12:31:40.513 回答
2

不,C 是一种静态类型语言。你不能这样做。

您可以做的是,要求用户选择一个操作,并根据用户输入,您可以拥有一个执行用户建议的操作的开关盒。

于 2013-04-21T12:31:56.300 回答
1

不,C 不能那样做。

或者 :

if (operator=='+')
    result=number1+number2;
于 2013-04-21T12:32:22.007 回答
1

恐怕您必须像这样处理 switch 或语句中的每个运算符:

switch(operator){
    case '+': // Note that this works only for scalar values not string
        result = number1+number2;
    // ...
}

头韵你可以像这样准备操作员回调列表:

typedef int (*operator_callback) (int operand1, int operand2);
typedef struct {
    char name;
    operator_callback callback;
} operator_definition;

int operator_add(int x, int y) {return x+y;}
int operator_minus(int x, int y) {return x-y;}

// And prepare list of those
operator_definition[] = {
    {'+', operator_add},
    {'-', operator_minus},
    {NULL, NULL}
};

// Function for fetching correct operator callback
operator_callback get_operator_callback(char op)
{
    int i;
    for( i = 0; operator_definition[i].name != NULL; ++i){
        if( operator_definition[i].name == op){
            return operator_definition[i].callback;
        }
    }
    return NULL;
}

// And in main function
operator_callback clbk = get_operator_callback(operator);
if( !clbk){
    printf( "Unknown operator %c\n", operator);
    return -1;
}
result = clbk(number1, number2);
于 2013-04-21T13:09:46.413 回答
1

的值operator是一个字符,而不是函数或运算符。您不能仅将在运行时输入的字符解释为程序编译时构建的程序的一部分。

改为这样做:

if (operator == ’+') return number1 + number2;
于 2013-04-21T12:35:53.073 回答