我正在尝试使用数组实现堆栈,以下是我目前为止的代码:
include <stdio.h>
int stack[100], top, n = 3;
void push();
void pop();
void show();
void main(){
top = -1;
int ch;
printf("1 = push, 2 = pop, 3 = display, 4 = exit \n");
printf("Enter a number: ");
scanf("%d", &ch);
do {
switch(ch){
case 1:
push();
break;
case 2:
pop();
break;
case 3:
show();
break;
case 4:
printf("Exited the stack");
break;
default:
printf("Non existant number");
break;
}
} while (ch != 4);
}
void push(){
int value;
if (top > n){
printf("Stack Overflow");
} else {
printf("Add number to stack: ");
scanf("%d", value);
top++;
stack[top] = value;
}
}
void pop(){
if (top < 0){
printf("Stack Underflow");
} else {
top--;
}
}
void show(){
int i;
for (i = top; i >= 0; i--){
printf("%d", stack[i]);
}
}
但是,当我运行这段代码并输入1(即push
一个值到堆栈中)时,我的代码并没有在添加值后中断进程,而是不断地要求添加新值,直到发生堆栈溢出。
我认为在switch中调用push
之后添加break
语句会中断函数并要求再次输入新数字,但在我当前的程序中,它不会这样做。
我应该在代码中更改什么?
1条答案
按热度按时间wqlqzqxt1#
尝试下面的代码,
这里我已经改变了你的代码中的一些部分。首先我在switch语句之后添加了
scanf
,以便从用户端获取数字。然后我改变了push
函数中的scanf("%d", &value);
。因为在你的代码中没有将值的地址传递给scanf
。因此值保持未初始化。最后,如果push
函数内的条件更改为检查top
值是否等于n