2013-04-21 3 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+ в number1 и number2.

Итак, я хотел бы сделать следующее:

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

2

№ C не является JavaScript. Он не имеет возможности оценки времени выполнения. Если вы хотите анализировать и оценивать математические выражения, вам нужно сделать что-то более сложное, например this guy did.

2

Нет, C является статически типизированным языком. Вы не можете сделать это.

Что вы можете сделать, попросите пользователя выбрать операцию и на основании пользовательского ввода вы можете иметь случай переключателя, который предлагает операция, которую предлагает пользователь.

1

Нет, C не может этого сделать.

В качестве альтернативы:

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

Значение operator является символом, а не функция или оператор. Вы не можете просто интерпретировать символ, который вводится во время выполнения, как часть вашей программы, которая создается при компиляции программы.

ли это вместо:

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

Вы имеете в виду, что дополнение является функцией под капотом? Oops – Lyrk

+0

Нет, это не так, это встроенный оператор. Вот почему я различал их. Тем не менее, если вы хотите * значение * '+' в соответствии с компилятором, вам нужно скомпилировать код. Кроме того, напишите программу, которая интерпретирует вход так, как вы хотите, например, выше. – Caleb

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

Смежные вопросы