2014-05-05 158 views
0

明天我會在數據結構'LAB'中進行期末考試!Postfix評估代碼使用堆棧

我運行此代碼時出現問題! 此代碼評估後綴表達式。這很簡單..但我不知道爲什麼當我運行它並嘗試分割例如:6/2。它打印出2而不是3!

+和 - 和*都是正確的,但與分裂的問題!你認爲在我的編譯器庫中的問題!

我使用Code :: Blocks和Visual C++。

您能否幫我解決這個問題! :(


驗證碼:

#include<iostream> 
using namespace std; 
#include<math.h> 
#include<conio.h> 
#define stacksize 6 
struct stacktype{ 
    float data[stacksize]; 
    int top; 
}; 

void push(stacktype*s, float d){ 
    if (s->top < 6) { 
    s->data[s->top]=d; 
    s->top++; 
    } 
} 

float pop(stacktype*s){ 
    if (s->top != 0){ 
    s->top--; 
    return s->data[s->top]; 
    } 
    return 0; 
} 

float oper(char symbol, float op1, float op2){ 
    switch (symbol){ 
    case '+': return (op1+op2);break; 
    case '-':return (op1-op2);break; 
    case '*':return (op1*op2);break; 
    case '/':return (op1/op2);break; 
    default: cout<<"illegal operation.......\n"; 
} 

    return 0; 
} 

int main() { 
    float op1,op2,symb,value; 
    char symbol; 
    stacktype *s; 
    s= new stacktype; 
    s->top=0; 
    cout<<"Enter The Postfix Expression To Evaluate:: \n\n"; 
    cin>>symbol; 
    while (symbol != '.') { 
    if (symbol == '+' || symbol == '-' || symbol == '*' || symbol == '/'){ 
    op2=pop(s); 
    op1=pop(s); 
    value=oper(symbol,op1,op2); 
    push(s,value); 
} 
else { 
    if (symbol == '0') symb =0 ; 
    else if (symbol == '1') symb = 1; 
    else if (symbol == '2') symb =2 ; 
    else if (symbol == '3') symb =3 ; 
    else if (symbol == '4') symb = 4; 
    else if (symbol == '5') symb =5 ; 
    else if (symbol == '6') symb =6 ; 
    else if (symbol == '7') symb =7; 
    else if (symbol == '8') symb =8 ; 
    else if (symbol == '9') symb =9 ; 

    push(s,symb); 
    } 
    cin>>symbol; 
} 
value=pop(s); 
cout<<"The Value:: \n"<<value<<endl; 
return 0; 
} 
+0

爲什麼在'return'語句後使用'break'? – Rakib

+0

您正在進入操作數第一個(即「/ 6 2.」),你必須最後輸入操作數(即「6 2 /。」) – 101010

+0

它只是一個Switch語法! – Mariah

回答

1

您的代碼給我正確的結果:

6 
2 
/
. 
The Value:: 
3 

請注意,您有反轉波蘭記號,即操作數必須遵循後要操作的值

+0

是的,當我把操作符放在兩個操作數之後時,它確實有效。我忘了它是一個POSTFIX表達式。 – Mariah

+0

請接受答案來標記問題解決。 –