2015-08-18 47 views
-2

在此程序中,彈出功能未被執行。使用函數c中的堆棧操作

語句'Popped value'不會輸出。

當我顯示堆棧時,即使在調用pop函數之後,我所推送的所有元素都將被打印。

我需要知道爲什麼會發生這種情況。

#include<stdio.h> 

#define MAX 7 

int x,st[MAX],i,top=-1; 

// Entering the elements into stack 
void push() 
{ 
    if(top>=MAX) 
     printf("Stack overflow\n"); 
     else 
     { 
     printf("\nEnter element to be pushed: "); 
     scanf("%d",&x); 
     top++; 
     st[top]=x; 
     } 
} 

//Deleting an element from the stack 
int pop() 
{ 
    if(top==-1) 
     printf("Stack is empty"); 
    else 
    { 
     x=st[top]; 
     top--; 
     return(x); 
    } 

    } 

//Displaying contents of stack 
void display() 
{ 

    if(top<=-1) 
    printf("Stack Empty"); 
    else 
    {  
     printf("Stack contents\n"); 
     for(i=top;i>=0;i--) 
     printf("%d\n",st[i]); 
    } 
} 

int main() 
{ 
    int c,item; 
    char ch='y'; 
    while(ch=='y') 
    { 
     printf("Enter choice\t"); 
     printf("1.Push 2.Pop 3.Display 4.Exit \n"); 
     scanf("%d",&c); 
     switch(c) 
     { 
     case 1: 
     push(); 
     break; 
     case2: 
     item=pop(); 
     printf("Popped value %d",item); 
     break; 
     case 3: 
     display(); 
     break; 
     case 4: 
     exit(0); 
     break; 
     } 
    } 
    getch(); 
} 
+4

將'case2:'更改爲'case 2:'。投票結束這個簡單的錯字。 – Lundin

+2

小心!在'top'爲-1的情況下,你將'返回'**沒有任何**並基本上調用UB ....請啓用編譯器警告。 –

回答

0

正確的方法(在您的編碼風格)寫的pop功能如下:

#include <exception> 
//Deleting an element from the stack 
int pop() 
{ 
    if(top == -1) 
     throw exception("Stack is empty"); 
    else 
     return st[top--]; 
} 

在這種情況下,如果堆棧是exception將提高並沒有什麼會返回,但正如你在printf之後寫的,你必須在你的if語句中返回一些你沒有的東西!

而且你在你的case2中有一個錯字,應該是case 2

0

返回(x)在彈出函數的其他條件中。 如果頂部== - 1,那麼它會通過一個錯誤