gpt4 book ai didi

用户输入的正确值未插入堆栈

转载 作者:行者123 更新时间:2023-12-02 06:36:03 25 4
gpt4 key购买 nike

因此,我自己编写了一个程序来将用户输入插入堆栈。但是尽管我进行了严格的尝试,我还是无法正确插入数据。它显示数据已插入,但在显示时显示垃圾值。这是我的主要功能:

//Stack
#include<stdio.h>
#include<stdlib.h>
#define MAXSTK 10

void push(int *, int, int *, int);
//void pop();
void show_stack();
int main()
{
int ch, ch1, stack[MAXSTK], top=-1;
do{
printf("\n <<Stack MENU>>");
printf("1. Add Element");
printf("2. Delete Element");
printf("3. Show Stack");
printf("4. Exit menu");
printf("\n Enter your choice->");
scanf("%d", &ch);

switch(ch)
{
case 1: printf("\n Enter element to add->");
scanf("%d",&ch1);
push(stack,ch1, &top, MAXSTK);
break;
/* case 2: pop();
break;*/
case 3: printf("\n The stack is->");
show_stack(stack, MAXSTK);
break;
default: printf("\n Invalid Choice!!!");
break;
}
}while(ch!=4);
return 0;
}

这是我的推送功能:

void push(int newstack[], int num, int *newtop, int bound)
{
*newtop=*newtop+1;
if(*newtop==0)
printf("\n Stack was Empty. New Value inserted.");

if(*newtop>(bound-1))
{
printf("\n Caution! OVERFLOW!!!");

}
newstack[*newtop]=num;
}

这是我的展示功能:

void show_stack(int newstack[], int bound)
{
int i;
printf("\n");
for(i=0;i<=bound;i++)
printf("%d",newstack[i]);
}

请帮我找出错误。

最佳答案

您正在传递数组长度并打印所有数组元素。所以你看到垃圾值(value)。尝试只打印插入的元素。

 show_stack(stack, top);

你的函数原型(prototype)应该是

void show_stack(int *,int);

无论是否溢出,您每次都会递增 newtop。这是一个不好的做法。它会在 popping() 和 show_stack() 时引起问题。你可以做这样的事情来避免它。

void push(int newstack[], int num, int *newtop, int bound)
{
// if newtop is < 0 display the message
if(*newtop<0)
printf("\n Stack was Empty. New Value inserted.");
// newtop will always point to top element. so if newtop is 9 it means your stack is full. so if newtop is >= bound-1(9) stack is full
if(*newtop>=(bound-1))
printf("\n Caution! OVERFLOW!!!");
else
{
*newtop=*newtop+1; //increment newtop
newstack[*newtop]=num; //store value in newtop
}
}

关于用户输入的正确值未插入堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18756835/

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