无法理解为什么队列功能程序在第一次工作但之后却不像预期的那样工作
can't under stand why the queue function program works at the first time but don't work like expected after that
这是我的代码
#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;
}
没有编译器错误
并且当您第一次进入出队队列时它起作用
但如果您同时重试,结果会出乎意料
我是一名正在努力做作业的学生,所以请不要在评论中刻薄,无论如何谢谢
请帮助我
你溢出数组。数组 q
的大小为 10 个元素。当您在末尾插入一个元素时,它不会 自动增长 。
您需要使用 malloc() and
调整大小而不是使用固定大小的数组 calloc()
来动态分配。或者使用更大的数组并确保入队不超过数组的大小。
旁白:fflush (stdin);
在标准 C 中是 undefined behaviour。
这是我的代码
#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;
}
没有编译器错误
并且当您第一次进入出队队列时它起作用
但如果您同时重试,结果会出乎意料
我是一名正在努力做作业的学生,所以请不要在评论中刻薄,无论如何谢谢
请帮助我
你溢出数组。数组 q
的大小为 10 个元素。当您在末尾插入一个元素时,它不会 自动增长 。
您需要使用 malloc() and
调整大小而不是使用固定大小的数组 calloc()
来动态分配。或者使用更大的数组并确保入队不超过数组的大小。
旁白:fflush (stdin);
在标准 C 中是 undefined behaviour。