代码看起来没有明显的错误。但是在使用fgets()函数读取输入时,需要注意字符串最后会包含换行符 \n,可能会影响后续处理逻辑。你可以尝试使用scanf()函数代替fgets()来读取表达式,如下所示:
printf("请输入中缀表达式:");
scanf("%[^\n]", expression);
这样可以避免将换行符读入表达式。
此外,在进行运算符优先级比较时,应该考虑到操作数栈为空的情况。你可以修改 precedence() 函数如下:
int precedence(char op1, char op2) {
if (op1 == '(' || op2 == '(')
return -1;
if (op2 == ')')
return 1;
if ((op1 == '*' || op1 == '/') && (op2 == '+' || op2 == '-'))
return -1;
if ((op1 == '+' || op1 == '-') && (op2 == '*' || op2 == '/'))
return 1;
return 0; // 相等优先级情况下也返回0
}
这样做能够更准确地判断运算符的优先级关系。
如果还有其他问题,请随时提问!
内容由零声教学AI助手提供,问题来源于学员提问




