2013-04-21 67 views
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); 


} 

回答

3

此:当你想

result=number1+operator+number2; 

绝不会C工作。正如您实际上将+ascii代码添加到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"); 
} 

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

+0

好多了:-) – Mat 2013-04-21 13:06:44

2

No. C不是JavaScript。它没有运行时评估功能。如果你想分析和评估数学表达式,那么你必须做更复杂的事情,比如this guy did

2

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

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

1

不,C不能那样做。

或者:

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

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

而是执行此操作:

if (operator == ’+') return number1 + number2; 
+0

你的意思是说加法是引擎盖下的功能吗?糟糕 – Lyrk 2013-04-21 12:39:03

+0

不,不是,它是一个内置的操作员。这就是为什么我区分他们。尽管如此,如果你想根据编译器需要'+'的*意义*,你需要编译代码。或者,编写一个解释输入的程序,如上所述。 – Caleb 2013-04-21 13:08:18

1

恐怕你必须处理的开关或语句中的每个运营商这样的:

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

Alliteratively你可以准备这样的操作回调列表:

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); 
+0

激烈的男人 – Lyrk 2013-04-21 13:52:08

相关问题