Я пытаюсь написать программу, которая оценивает постфиксное арифметическое выражение. Программа отправляет строку символов в мою функцию evaluatePostfix
, которая переходит к идентификации операндов и операторов и предлагает целочисленное решение. Я манипулирую стеками в этой программе, нажимая отсканированный символ, как он идентифицирован, и, конечно, выполняя соответствующие попсовые функции, когда нужно оценить. Однако сейчас у меня проблема с зависанием программы в бесконечном цикле. Наверное, я не совсем уверен, как сказать функции перейти к следующему символу в строке после того, как он оценил первый символ. Следует также отметить, что пользователь помещает пробел между каждым операндом и оператором. Вот моя функция:
int evaluatePostfix(char *postfixStr)
{
stack * s;
int x, y;
stackInit(&s);
do {
if(isOperand(postfixStr) == 1) {
stackPush(&s, postfixStr);
}
if(isOperator(postfixStr) == 1) {
y = atoi(stackPop(s));
x = atoi(stackPop(s));
char *str = malloc(10 * sizeof(char));
sprintf(str, "%d", applyOperator(x, y, postfixStr));
stackPush(&s, str);
}
} while (postfixStr != NULL);
return stackPop(s);
}
Я знаю, что функции, которые управляют стеком, являются правильными, поскольку они были предоставлены моим инструктором. Может быть, кто-нибудь подскажет, что мне не хватает?