我的想法是让这个程序首先将数字排队(从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;
}
答案 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)