此程序在完整时没有出现“Queue Overflow”错误消息。为什么会这样? qfull函数有问题吗?我甚至试过(qfull(* r)== 1)。即使这样它也不起作用。即使它已经完整,它也会继续接受数字。
#include<stdio.h>
#include<conio.h>
#include<process.h>
#define QUEUE_SIZE 5
void insert_rear(int,int*,int*);
void delete_front(int*,int*,int*);
void display(int*,int,int);
int qempty(int,int);
int qfull(int);
void main()
{
int f=0,r=-1,q[10],item,choice;
for(;;)
{
clrscr();
printf("\t\t\t Ordinary Queue Operation\n\n");
printf("\t\t\t 1. Push\n");
printf("\t\t\t 2. Pop\n");
printf("\t\t\t 3. Display\n");
printf("\t\t\t 4. Exit\n\n");
printf("\t\t\t Enter your choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("Enter the item to be inserted: ");
scanf("%d",&item);
insert_rear(item,q,&r);
continue;
case 2:
delete_front(q,&f,&r);
break;
case 3:
display(q,f,r);
break;
case 4:
exit(0);
default:
printf("\t\t\t Invalid Input - Try Again");
}
getch();
}
}
void insert_rear(int item,int q[],int *r)
{
if(qfull(*r)==1)
{
printf("\t\t\t Queue Overflow\n");
return;
}
q[++(*r)]=item;
}
void delete_front(int q[],int *f,int *r)
{
if(qempty(*f,*r))
{
printf("\t\t\t Queue Underflow\n");
return;
}
printf("Pop successfull, item 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;
}
int qfull(int r)
{
return(r==QUEUE_SIZE-1)?1:0;
}
答案 0 :(得分:0)
问题是对clrscr
的调用正在清除屏幕上的错误消息,因此您只是看不到消息。如果您删除了clrscr
我确定您会在新菜单被绘制到屏幕之前看到该消息。
您需要设置一个指示问题的错误标志,然后在显示菜单时显示错误消息。