2012-08-10 3 views
0

아래 부분을 도와주십시오. n을 스택의 상단에서 제거 스택이 비어있는 경우, 출력해야한다 '-1 터진'.스택 구현 출력

void pop(void) { 
    struct node *temp; 
    int n; 
    if (top == NULL) { 
     printf("%d popped\n", top); 
     return; 
    } 
    n = top->item; 
    temp = top; 
    top = top->prev; 
    free(temp); 
    printf("%d popped\n", n); 
    return; 
} 

답변

0

나는 이것이 당신의 의도를 더 잘 맞는 생각 : 에드와 익명 올바르게 지적으로

void pop(void) { 
    int n; 
    if (top == NULL) { 
     // empty: magic sentinel value 
     n = -1; 
    } else { 
     n = top->item; 
     // not empty: update the stack 
     struct node *temp = top; 
     top = top->prev; 
     free(temp); 
    } 
    printf("%d popped\n", n); 
    return; 
} 

, 당신은 명시 적으로 -1를 인쇄하여 원래의 버그를 해결할 수 있습니다. 그러나 처음부터 로직을 취약하게 만드는 것은 (그리고이 특정 버그를 부수적으로 수정하는 것) 나에게 더 큰 승리처럼 보입니다.

1

논리 오류 (I 0 기압 받고 있어요), 당신은 제로에 대해 비교하고 싶어하는 -1의 출력!

if (top == NULL) { 
     printf("%d popped\n", top);  
    return; 
    } 

NULL 그냥 줄을 변경 (예 : 아무것도에 대한 포인터) 널 포인터는 일반적으로 0

의 값을 가지고 있기 때문에

if (top == NULL) { 
     printf("%d popped\n",-1);  
    return; 
    } 
+0

상수에 액세스하는 형식으로'printf'를 사용하는 이유는 무엇입니까? –

+0

요구 사항에 따라 응답 ..;) – perilbrain

1

이어야한다

printf("%d popped\n", top); 

to

,093,210