作者conan77420 (小馬非馬)
看板C_and_CPP
標題[問題] postfix轉infix運算
時間Thu Jul 30 13:51:29 2009
我知道我寫的很不完整,有很多漏洞
不過現在我想先試出最基本的例子
輸入 12+ 可以得到3的結果
請問為什麼以下程式的輸出結果有誤?請高手指正,謝謝 > <"
#include<iostream.h>
#include <string.h>
#define space 20
char str[space];
int s=0;
void push(int);
int pop(void);
int main()
{
printf("輸入後序運算式:");
scanf("%s",str);
int l=strlen(str)-1;
for(int s=0; s<l ;s++)
{
if(str[s]>='0' && str[s]<='9') //若陣列中是1~9則轉換成數字
{
str[s]=str[s]-'0';
}
else //若是運算子則做以下
{
if(str[s]=='+')
{push(pop()+pop());}
else if(str[s]=='-')
{push(pop()-pop());}
else if(str[s]=='+')
{push(pop()*pop());}
else if(str[s]=='/')
{push(pop()/pop());}
else
{printf("error");}
}
}
printf("ans= %d",str[s]); //輸出最後結果
system("pause");
}
============================ //push、pop 副程式
void push(int n)
{
if(top>=space-1)
{printf("stack is full!");}
else
{str[s]=n;}
}
int pop(void)
{
if(s==0)
{printf("stack is empty!");}
else
{return str[--s];}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.129.195
→ khalid:錯誤太多,數字沒push進去,-和/運算子順序不對,請參考K&R 07/30 14:21
→ dendrobium:把VC6先丟掉吧... 07/30 14:29
推 joefaq:沒錯 先把VC6砍掉 07/30 14:37
推 zlw:從哪邊看出VC6的...iostream.h嗎? 07/30 14:42
推 dendrobium:yes 07/30 14:42
推 zlw:原來如此 07/30 14:44
推 VictorTom:DevC++不是也可以寫 #include <iostream.h> 的嗎XD 07/30 16:29
→ conan77420:下午腦袋不清醒寫的果然慘不人睹,現在看才知道有多白 07/30 16:50
→ conan77420:癡,謝謝樓上幾位...還有...我的確是用dev... 07/30 16:51