2014-07-01 2 views
0

내 코드는 비교적 간단합니다. 명령 행 인수를 취하여 그에 따라 스택을 배치합니다.접미사 표기법 - 스택 팝과 푸시 도움말, mod 또는 pow 연산자에 대해 반환되는 잘못된 반환 값

명령 행 인수 : "2 +"동일해야합니다 4.

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <math.h> 

typedef struct stack { 

    int top; 
    int items[100]; 

} stack; 

void initializeStack(stack* p); 
void push(stack* p, int val); 
int pop(stack* p); 

int main(int argc, char** argv) { 

    int i, a, b; 
    int val = 0; 
    stack ph; 
    initializeStack(&ph); 

    for(i=1; i<argc; i++) { 
     if(strcmp(argv[i], "*") == 0) { 
      a = pop(&ph); 
      b = pop(&ph); 
      val = a*b; 
      push(&ph, val); 
     } 

     else if(strcmp(argv[i], "/") == 0) { 
      a = pop(&ph); 
      b = pop(&ph); 
      val = b/a; 
      push(&ph, val); 
     } 

     else if(strcmp(argv[i], "+") == 0) { 
      a = pop(&ph); 
      b = pop(&ph); 
      val = a+b; 
      push(&ph, val); 
     } 

     else if(strcmp(argv[i], "-") == 0) { 
      a = pop(&ph); 
      b = pop(&ph); 
      val = b-a; 
      push(&ph, val); 
     } 

     else if(strcmp(argv[i], "^") == 0) { 
      a = pop(&ph); 
      b = pop(&ph); 
      val = pow(a,b); 
      push(&ph, val); 
     } 

     else if(strcmp(argv[i], "%") == 0) { 
      a = pop(&ph); 
      b = pop(&ph); 
      val = b%a; 
      push(&ph, val); 
     } 

     else { 
      push(&ph, atoi(argv[i])); 
     } 
    } 

    printf("%d\n", pop(&ph)); 

    return 0; 
} 

void initializeStack(stack* p) { 
    p->top = 0; 
} 

void push(stack* p, int val) { 
    p->top++; 
    p->items[p->top] = val; 
} 

int pop(stack* p) { 
    int y; 
    y = p->items[p->top]; 
    p->items[p->top] = 0; 
    (p->top)--; 
    return y; 
} 

내가 해봤 "2 +"하고 일했다, 그래서이 "2 4 + 6분의 3 +" 그것은 8로 평가되었지만이 문제가 있습니다. 여기서 "2 4^2 * 5 % 2 -"는 0으로 평가되어야하지만 대신 -2가됩니다. 여기에 결함이 뭐니? 코멘트에 작성된

+0

를 작동합니다 그것은 0을 내게 준다. –

+0

어쩌면 그것은 내 컴파일러인가? 이해할 수 없다. 똑같은 것을 실행하고 -2를 얻었습니다. – NoReceipt4Panda

+0

커맨드 라인은 무엇입니까? * 특수화 했습니까? 코드를 수정하고 args를 먼저 인쇄하십시오. env가 이상한 동작 (탈출, 확장 등)을 도입하지 않았는지 확인하십시오. –

답변

3

:. 당신은

./a.out 2 4^2 "*" 5 % 2 - 

와 그것을 그렇게 칼 그렇지 않으면 현재 폴더의 모든 파일에 확장 될 것이라고 * "에 넣어 가지고 있고 그것은

+0

따옴표로 묶으려고 시도했지만 여전히 동일한 출력을합니다. – NoReceipt4Panda

+0

어떤 OS를 사용하고 있습니까? – mch

+0

Windows 7, 컴파일러로 코드 블록. – NoReceipt4Panda