在这个程序中,pop函数没有被执行。
声明'弹出值'不会在输出中打印。
当我显示堆栈时,即使调用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();
}
答案 0 :(得分:0)
返回(x)处于pop函数的else条件。 如果top == - 1那么它将通过错误
答案 1 :(得分: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
。