这是我的代码
#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-->enqueuen");
printf("2-->dequeuen");
printf("3-->shown");
printf("4-->exitn");
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 byen");
}
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 --> %dn",d);
return deleted;
}
int show(int q[],int *numelem)
{
for (int i=0;i<*numelem;i++)
{
printf("%d,",q[i]);
}
printf("n");
return *numelem;
}
没有编译器错误
当您第一次进入取消排队的电子队列时,它可以工作
但是,如果您在同一时间重试,结果是出乎意料的
我是一个试图做家庭作业的学生,所以请不要在评论中刻薄,无论如何都要感谢
请帮助我
你正在溢出数组。数组q
的大小为 10 个元素。当您在末尾插入元素时,它不会自动增长。
您需要使用malloc() and
动态分配,calloc()
而不是固定大小的数组调整其大小。或者使用更大的数组,并确保排队不超过数组的大小。
旁白:fflush (stdin);
标准C中是未定义的行为。