Следующее должно сделать трюк. Он избегает использования if else
и switch
, используя тот факт, что сравнение оператора с +
, -
, *
или /
вернет 1
только для одного из сравнений 0
для остальных. Следовательно, результатом является сумма этих сравнений, умноженная на математическое выражение, соответствующее каждому оператору:
#include<stdio.h>
main(){
float a,b,result;
char oper [2];
printf("enter a value:");
scanf("%f",&a);
printf("enter another value:");
scanf("%f",&b);
printf("enter an operator:");
scanf("%1s", oper);
result = (oper[0] == '+') * (a + b) +
(oper[0] == '-') * (a - b) +
(oper[0] == '*') * (a * b) +
(oper[0] == '/') * (a / b);
printf("%4.2f %s %4.2f = %4.2f\n", a, oper, b, result);
}
При сохранении в файл с именем calculator.c
скомпилирует его следующая команда:
gcc calculator.c
Вывод будет называться a.out
, и его можно запустить так:
./a.out
enter a value:24
enter another value:4
enter an operator:/
24.00 / 4.00 = 6.00
Я использовал gcc (GCC) 4.4.1 20090725 (Red Hat 4.4.1-2)
, но я уверен, что другие версии будут работать так же хорошо.
Дайте мне знать, если я выполню ваше задание; -)