我刚开始使用C而我正在尝试从我的书中执行此队列实现程序,但它无法正常工作。它给出了函数qfull和qempty未定义的错误。即使在正确声明该功能后,它仍然会产生更多错误。
#include <stdio.h>
#include <process.h>
#include <conio.h>
#define QUEUE_SIZE 5
void main()
{
void insert_rear(int, int *, int *);
void delete_front(int *, int *, int *);
void display(int *, int, int);
int choice, item, f, r, q[10];
/* Queue is empty */
f = 0; /* Front end of queue*/
r = -1; /* Rear end of queue*/
for (;;)
{
clrscr();
printf("\t\t\t Ordinary Queue Operation\n\n");
printf("\t\t\t 1 …. Push / Insert\n");
printf("\t\t\t 2 …. Pop / Delete\n");
printf("\t\t\t 3 …. View / Display\n");
printf("\t\t\t 4 …. Exit\n\n\n");
printf("\t\t\t Enter the choice : "); scanf("%d", &choice);
switch (choice)
{
case 1: // push into the queue
printf("Enter the item to be inserted : "); scanf("%d", &item);
insert_rear(item, q, &r);
continue;
case 2: // pop from the queue
delete_front(q, &f, &r);
break;
case 3: // display queue
display(q, f, r);
break;
case 4:
exit(0);
default:
printf("\t\t\tInvalid Input – Try Again");
} // end of switch
getch();
}// end of for
} // end of main
/*******************/
void insert_rear(int item, int q[], int *r)
{
if (qfull(*r)) /* Is queue full ? */
{
printf("\t\t\tQueue overflow\n");
return;
}
/* Queue is not full */
q[++(*r)] = item; /* Update rear pointer and insert a item */
}
/*—————————————————————– */
void delete_front(int q[], int *f, int *r)
{
if (qempty(*f, *r))
{
printf("\t\t\tQueue underflow\n");
return;
}
printf(" Pop Successfull, element deleted = %d ",q[(*f)++]);
if(*f> *r)
{
*f=0,*r=-1;
}
}
/*********************************************************/
void display(int q[], int f, int r)
{
int i;
if (qempty(f,r))
{
printf("Queue is empty\n");
return;
}
printf("\t\t\t Queue Container\n\n");
for(i=f;i<=r; i++)
printf("\t\t\t| %5d |\n",q[i]);
}
/**********************************************/
int qempty(int f, int r)
{
return (f>r)?1:0;
/* returns true if queue is empty otherwise returns false */
}
/**********************************************/
int qfull(int r)
{ /* returns true if queue is full otherwise false */
return (r==QUEUE_SIZE-1)?1:0;
}
答案 0 :(得分:2)
您必须在调用函数之前声明函数。在程序开头添加原型,例如:
int qempty( int f, int r );
int qfull( int r );
答案 1 :(得分:2)
你应该把这些声明:
void insert_rear(int, int *, int *);
void delete_front(int *, int *, int *);
void display(int *, int, int);
在主外(及其上方)。您还需要通过这些声明声明qfull和qempty。如果函数没有在上面调用它的文件中定义,那么它必须在它被调用的地方上面声明。否则,编译器无法“看到”它们。
答案 2 :(得分:1)
事情是函数在定义之前被调用。尝试在main之前将它们移动到程序的顶部。