[作業]中序轉後序印不出結果
遇到的問題: (題意請描述清楚)
希望得到的正確結果:
Input file contains the line:
(5-2)*3+6/(4-1)
Your output file should contain the following:
52-3*641-/+
11
這是作業題目~可是做完之後OUTPUT檔卻跑不出來
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
Dev-C++
有問題的code: (請善用置底文標色功能)
以下是程式碼~因為不知道錯誤在哪裡= =
第一次在這PO文
若有違規請告知我
會馬上改文章~
typedef enum {eos,lparen,rparen,plus,minus,times,divide,power,operand}precedence ;
char symbol[MAX_SIZE] ;
char temp[MAX_SIZE] ;
int ans[MAX_SIZE] ;
int top1=0,top2=0 ;
precedence compare (char x)
{ switch (x)
{case ' ' : return eos;
case '(' : return lparen;
case ')' : return rparen;
case '+' : return plus;
case '-' : return minus;
case '*' : return times;
case '/' : return divide;
case '^' : return power;
default : return operand;
}
}
int main()
{ char c;
int i,j=0;
precedence token;
FILE*input,*output ;
symbol[0]=' ';
input=fopen("c:\\input1.txt","r") ;
output=fopen("c:\\output1.txt","w") ;
fprintf(output," postif : ");
/*將input1檔中資料讀入 轉換成postfix放到暫存陣列*/
fscanf(input,"%c",&c) ;
for(token=compare(c);token!=eos;token=compare(c))
{ if (compare(c) == operand)/*看他是否為運算為元*/
temp[++top2]=c;
else if (compare(c)==lparen)/*是不是為左括弧*/
symbol[++top1]=c;
else if (compare(c)==rparen) /*是不是為左括弧*/
{ while (compare(symbol[top1])!=lparen)
temp[++top2]=symbol[top1--];
top1--;
}
else
{ while (compare(symbol[top1]) >= token)
temp[++top2]=symbol[top1--];
if(top1<MAX_SIZE) symbol[++top1]=c;
}
fscanf(input,"%c",&c) ;
}
while (compare(symbol[top1])!=eos)/*將運算寫入*/
temp[++top2]=symbol[top1--];
/*將postfix寫入output1檔中*/
for(i=1;i<=top2;i++)
fprintf(output,"%c",temp[i]);
/*計算答案並寫入output1檔中*/
for(i=1;i<=top2;i++)
{ if (compare(temp[i])==operand)
{ ans[j++]=(temp[i]-'0');}
else
{j=j-2;
switch (temp[i])
{case '+' : ans[j++]=ans[j]+ans[j+1];break;
case '-' : ans[j++]=ans[j]-ans[j+1];break;
case '*' : ans[j++]=ans[j]*ans[j+1];break;
case '/' : ans[j++]=ans[j]/ans[j+1];break;
case '^' : ans[j++]=pow((ans[j]),(ans[j+1]));break;
default : break;
}
}
}
fprintf(output,"\n Answer : %d",ans[j-1]);
printf("\n\n 已完成\n\n 檔案位置: C:\\output1\n\n\n") ;
fclose(input) ;
fclose(output) ;
system("pause");
return (0);
}
補充說明:
--
更多IT工作機會請上↓
http://www.wretch.cc/blog/itechbonnie
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.116.114.235
→
12/08 09:52, , 1F
12/08 09:52, 1F
→
12/08 09:53, , 2F
12/08 09:53, 2F
→
12/08 10:07, , 3F
12/08 10:07, 3F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章