为什么数组不能继续插入最后一个数字?

时间:2016-11-23 06:55:42

标签: c arrays

我的想法是让这个程序首先将数字排队(从1001开始)直到10循环。但同时每两次循环。我希望它删除第一个数字插入。然后它在最后一个数字插入后继续插入数字。例如。 (0)插入1001,(1)插入1002,(2)删除1001,(3)插入1003,(4)插入1004,(5)删除1002.这是我想象的和欲望输出。但现在。删除时重置为初始号码。

#include <stdio.h>
#define MAX 10 /* The maximum size of the queue */
#include <stdlib.h>

void insert(int queue[], int *rear, int value)
{
    if(*rear < MAX-1)
    {
        *rear= *rear +1;
        queue[*rear] = value;
        printf("\n%d queue at counter 1",value);
    }
    else
    {
        printf("\nThe queue is full can not insert a value\n");
        exit(0);
    }
}
void delete(int queue[], int *front, int rear, int * value)
{
    if(*front == rear)
    {
        printf("\nThe queue is empty can not delete a value\n");
        exit(0);
    }
    *front = *front + 1;
    *value = queue[*front];
    printf("\n%d left counter 1",*value);
}

int main()
{
    int queue[MAX];
    int iCounter,front,rear,loop=0,a,b,c;
    front=rear=-1;
    a=1001;

    do{
        printf("\n------------------------------");
        printf("\n\tWelcome!!\n");
        printf("\n------------------------------");
        printf("\nPress which counter you prefer");
        printf("\n1-Pay bill");
        printf("\n2-Check up");
        printf("\n3-QnA");
        printf("\n------------------------------\n");
        scanf(" %d",&iCounter);
        loop++;

        switch(iCounter)
        {
            case 1:
                insert(queue,&rear,a);
                a++;
                break;
            default:
                printf("\nError input!");
                break;
        }

        while(loop==2)
        {
            delete(queue,&front,rear,&a);
            loop=0;
        }

    }while(rear<MAX-1);

    return 0;
}

2 个答案:

答案 0 :(得分:0)

您的删除功能采用a的地址并将删除的值写入其中。因此它将设置为您删除的值。

你可以删除 *value = queue[*front]; 并改变

printf("\n%d left counter 1",*value);

printf("\n%d left counter 1",queue[*front]);

并删除整个参数,然后我认为它可以做你想做的事。

答案 1 :(得分:0)

你的delete()函数传递一个as by pass,这就是为什么你没有得到你想要的东西

delete(queue,&front,rear,&a);

对于您的设计,您应该传递一个按值传递

delete(queue,&front,rear,a);
void delete(int queue[], int *front, int rear, int value)