全部评论 3

    第14行 float f=atof(c);

    atof(c)返回的是double,你用了float去存,精度不够。后面即使用了long double,那也存的是已经被近似的数据了;


    第23~24行 x=s2.top();s2.pop(); y=s2.top();s2.pop();

    你是从右往左逆序遍历数组(for i=n;i>=1),所以先弹出来的x其实是后入栈的操作数,后弹出来的y才是先入栈的操作数;

    第27行 else if(a[i].c=='-')s2.push(x-y);

    实际执行的是 后入栈的 − 先入栈的。比如输入 3 5 -,期望 3−5=−2,你算的是 5−3=2;

    第28行 else if(a[i].c=='/')s2.push(x/y);

    同第27行,5 2 / 期望 5÷2=2.5,实际 2÷5=0.4;


    第19行 for(int i=n;i>=1;i--){

    反着读就会很拧巴,而且只适用于加法或乘法。改成 for(int i=1; i<=n; i++) 配合正确的弹出顺序会更好。


    !当然我不确定我说的对不对,只是凭感觉

    2026-07-26 来自 天津

    2
  • 细节byd

    2026-07-25 来自 浙江

    1
  • d

    2026-07-30 来自 浙江

    0

热门讨论