gpt4 book ai didi

使用数组创建堆栈

转载 作者:行者123 更新时间:2023-11-30 20:40:29 24 4
gpt4 key购买 nike

我正在尝试编写代码来通过使用数组创建堆栈,为此我应该使用动态内存分配。问题是它没有对响应进行扫描来确定是否应该退出循环。

#include<stdio.h>

static int top, size, *a, x;

stfull(){
if(top<size) x = 0;
else x = 1;
}

stempty(){
if(!top) x = 1;
else x = 0;
}

push(int z){
if(x){
printf("stack full\tstack overflow\n");
return;
}
else{
a[top] = z;
top++;
return;
}
}

pop(){
if(x){
printf("empty stack\tstack underflow\n");
return;
}
else{
printf("%d ", a[top]);
top--;
return;
}
}

main(){
int num, res;
char ans = 'y';

printf("array size:\t");
scanf("%d", &size);

a = malloc(size*sizeof(int));

printf("choose number for result\n1. push elements\n2.display elements\n3.exit\n");
scanf("%d", &res);

switch(res){
case 1:
while(ans == 'y'){
printf("enter a number\t");
scanf("%d", &num);

push(num);

printf("enter more?\t");
ans = getchar();
}
break;
case 2:
do{
pop();

printf("pop more?\t");
ans = getchar();
}while(ans == 'y');
break;
case 3:
exit(1);
}
}

示例输入:

数组大小:5

选择结果数字

<强>1。推送元素

2.显示元素

3.退出
1

输入数字 3

输入更多?

无论 ans 的值如何,程序都会在此时退出。谁能更正我的代码吗?

最佳答案

您的代码退出,因为 getchar() 读取\n [enter] 作为 ans 的字符按下。
您的输入是

enter a number 3[enter]

所以

ans=getchar();

读取为[输入]。所以一个简单的解决方案是使用 getchar() 两次

getchar();
ans=getchar();

您的代码将继续工作

关于使用数组创建堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22308433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com