2012-04-19 19 views
0

私はtxtファイルから後置式を読み込み、それを評価しようとしています 入力は10 5 *ですが、出力は50でなければなりませんが、10と5だけを読み込みます。 演算子はasciiコード、任意の助け? '*'文字は無視されます - は、ここでの問題はchがそうinFile >> chのみnummbersを読み込みますintであるということである私のコードスタックを使用した後置評価

#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include<stdio.h> 
#include<ctype.h> 
#include<stdlib.h> 
using namespace std; 
#define SIZE 40 
int stack[SIZE]; 
int top=-1; 

void push(int n) 
{ 
    if(top==SIZE-1) 
    { 
     printf("Stack is full\n"); 
     return; 
    } 
    else 
    { 
     top=top+1; 
     stack[top]=n; 
     printf("Pushed element is %d\n",n); 
     system("pause"); 
    } 
} 

int pop() 
{ 
    int n; 
    if(top==-1) 
    { 
     printf("Stack is empty\n"); 
     system("pause"); 
     return 0; 
    } 
    else 
    { 
     n=stack[top]; 
     top=top-1; 

     return(n); 
    } 
} 

int main() 
{ 

    int str[50],ch; 

    int i=0; 
    int n,op1,op2; 

    ifstream inFile; 
    ch=str[i]; 

    inFile.open("D:\\me.txt"); 
    if (!inFile) 
    { 
     printf("Unable to open file"); 
     system("pause"); 
     exit(1); // terminate with error 
    } 

    while (inFile >> ch) 
    { 
     if(ch=='+' || ch=='-' || ch=='*' || ch=='/' || ch=='%' || ch=='^') 
     { 

      op1=pop(); 
      op2=pop(); 
      if (op1<op2) 
      { 
       n=op1; 
       op1=op2; 
       op2=n; 
      } 
      if(ch=='+') 
       n=op1+op2; 
      else if(ch=='-') 
       n=op1-op2; 
      else if(ch=='*') 
       n=op1*op2; 
      else if(ch=='/') 
       n=op1/op2; 
      else if(ch=='%') 
       n=op1%op2; 
      else if(ch=='^') 
       n=op1^op2; 
      else 
      { 
       printf("The operator is not identified\n"); 
       system("pause"); 
       exit(0); 
      } 

      printf("n=%d\n",n); 
      system("pause"); 
      push(n); 


     } 
     else 
     { 
      n=ch; 
      push(n); 
     } 
     ch=str[++i]; 
    } 
    inFile.close(); 
    printf("The value of the arithmetic expression is=%d\n",pop()); 
    system("pause"); 
    return 0; 
} 

答えて

1

です。

はまた、あなたが定期的に(そして、あなただけchに書き込まれてしまったものは何でも無視)chに割り当てるから読み出すこと初期化されていないstr[]配列を持っています。あなたは

... str[]を取り除くか、あなたが最初の場所でそれをそこに置く作られた考えを完了する必要があります
関連する問題