gpt4 book ai didi

无法理解为什么队列函数程序第一次工作但之后不按预期工作

转载 作者:行者123 更新时间:2023-11-30 15:12:23 26 4
gpt4 key购买 nike

这是我的代码

<小时/>
#include <stdio.h>
#include <stdlib.h>

int Enqueue(int[],int,int*,int);
int Dequeue(int[],int,int*,int);
int show(int[],int*);

int main (void)
{
int q[]={1,2,3,4,5,6,7,8,9,10};
int n = sizeof(q)/sizeof(int);
int numelem = n;
int l=0;
int e=0;
int d=0;
while(l!=4)
{
printf("°°°°menu items°°°°\n");
printf("1-->enqueue\n");
printf("2-->dequeue\n");
printf("3-->show\n");
printf("4-->exit\n");
fflush (stdin);
scanf("%d",&l);
if(l==1)
{
printf("plz enter the element you want to add --> ");
scanf("%d",&e);
Enqueue(q,e,&numelem,n);
//printf("Q");
}
else if(l==2)
{
Dequeue(q,d,&numelem,n);
}
else if(l==3)
{
show(q,&numelem);
}
else if(l==4)
{
break;
}
else
{
printf("plz enter a number from the menu!!!!!\n");
}
}
printf("bye bye\n");
}
int Enqueue(int q[],int e,int *numelem,int n)
{
int inserted=0;
n++;
if(*numelem<n)
{
inserted=1;
q[*numelem]=e;
*numelem+=1;
}

return inserted;

}
int Dequeue(int q[],int d,int *numelem,int n)
{
int deleted=0;
if(*numelem==n)
{
deleted=1;
d=q[0];
*numelem-=1;
n--;
}
for (int i=0;i<=n;i++)
{
q[i-1]=q[i];
}
printf("the deleted item is --> %d\n",d);
return deleted;
}
int show(int q[],int *numelem)
{
for (int i=0;i<*numelem;i++)
{
printf("%d,",q[i]);
}
printf("\n");
return *numelem;
}
<小时/>

没有编译器错误

<小时/>

当你第一次进入Equeue of Dequeue时它会起作用

<小时/>

但是如果您同时重试,结果会出乎意料

<小时/>

我是一名正在努力做作业的学生,​​所以请不要在评论中刻薄,无论如何谢谢

<小时/>

请帮帮我

最佳答案

您的数组溢出了。数组q大小为 10 个元素。当您在末尾插入元素时,它不会自动增长。

您要么需要使用malloc() and动态分配使用 calloc() 调整其大小而不是固定大小的数组。或者使用更大的数组并确保排队不超过数组的大小。

旁白:fflush (stdin);undefined behaviour在标准 C 中。

关于无法理解为什么队列函数程序第一次工作但之后不按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35108997/

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