В вашем коде есть несколько опечаток, и вы получите предупреждения, потому что вы не включили все необходимые заголовочные файлы.
Невозможно определить массив без размера, например char string[]
.
В зависимости от вашего компилятора и библиотеки C вы можете получить предупреждение об устаревшей функции gets
.Вы должны использовать fgets
вместо этого, чтобы избежать переполнения буфера.Обе функции возвращают указатель, который может быть NULL
, но не EOF
.
Сначала вы должны исправить все предупреждения компилятора.
Я не буду писать полную программу (пока),но предложите несколько возможных решений.
Для интеллектуального решения вы можете реализовать функцию, которая выполняет вычисление A op B
, используя switch
с 4 случаями, и вызывать ее дважды.Функция может быть определена как
int calculate(int a, char op, int b)
. С вашим вычислением A op1 B op2 C
вам сначала нужно проверить приоритет операторов op1
и op2
, чтобы решить, будете ли вы вычислять ( A op1 B ) op2 C
или * 1025.*.Для этого вы можете реализовать функцию, которая возвращает приоритет оператора.Я полагаю, чем ниже значение, тем выше приоритет.Функция может быть определена как
int precedence(char op)
Тогда вы можете сделать что-то вроде этого:
if(precedence(ops[0]) < precedence(ops[1])) {
return calculate( calculate(nums[0], ops[0], nums[1]),
ops[1], nums[2] );
} else {
return calculate( nums[0], ops[0],
calculate(nums[1], ops[1], nums[2]) );
}
В программе из вопроса вы можете использовать sum = calculate( ... )
вместо return calculate( ... )
.