You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

《C语言程序设计:现代方法》第10章项目6代码逻辑疑问

解惑:栈式计算器中else if (input == '+') push(operandA + operandB);的工作逻辑

首先得明确这段代码的上下文:它属于一个基于栈实现的逆波兰表达式计算器,核心规则是遇到数字就压入栈,遇到运算符就弹出栈顶两个数计算,再把结果压回栈。

当你输入75+=这个表达式时,咱们拆解成逐个字符的处理流程,就能看懂这行代码的作用了:

  • 第一步读入'7':程序判断这是数字,直接压入栈,此时栈内容为 [7]
  • 第二步读入'5':同样是数字,压入栈,栈内容变为 [7, 5]
  • 第三步读入'+':触发你疑惑的这行代码:
    1. 程序先从栈顶弹出第一个数,赋值给operandB(也就是5——因为栈是后进先出,最后压入的数先出来)
    2. 再弹出第二个数,赋值给operandA(也就是7,这是更早压入的数)
    3. 计算operandA + operandB,也就是7 + 5 = 12,然后把结果12压回栈,此时栈内容变为 [12]
  • 第四步读入'=':这是计算器的输出触发符,程序会弹出栈顶的12并显示结果

你可能会疑惑为什么是operandA + operandB而不是反过来?这是因为栈的后进先出特性:当你输入7再输入5,5在栈顶,先弹出的是右操作数,后弹出的是左操作数,这样加法顺序才符合咱们输入的7+5逻辑。如果换成减法、除法这类有顺序的运算符,这个写法就更关键了——比如输入75-,必须计算7-5而非5-7,operandA - operandB的顺序就能保证结果正确。

内容的提问来源于stack exchange,提问作者pickle323

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:24:02