C - 无法忍受为什么队列函数程序第一次工作但之后没有按预期工作



这是我的代码


#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中是未定义的行为

最新更新