接尾辞の算術式を評価するプログラムを書こうとしています。プログラムは文字列を私の関数evaluatePostfix
に送信します。関数はオペランドと演算子を識別し、整数の解を考え出します。このプログラムでは、スキャンされた文字が識別されたときにそれをプッシュし、評価が必要なときに適切なポップ機能を実行することで、スタックを操作しています。しかし、今のところ、プログラムが無限ループのように見えるものにぶら下がっているという問題があります。最初の文字を評価した後、文字列内の次の文字に進むように関数に指示する方法がよくわからないと思います。もう1つの注意点は、ユーザーが各オペランドと演算子の間にスペースを入れることです。これが私の関数です:
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);
}
スタックを操作する関数は、インストラクターから提供されたものであるため、正しいことを知っています。誰かが私に何が欠けているのかについての手がかりを教えてもらえますか?