C队列程序满时不会出现溢出错误

时间:2012-01-28 08:40:18

标签: c error-handling

此程序在完整时没有出现“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;
}

1 个答案:

答案 0 :(得分:0)

问题是对clrscr的调用正在清除屏幕上的错误消息,因此您只是看不到消息。如果您删除了clrscr我确定您会在新菜单被绘制到屏幕之前看到该消息。

您需要设置一个指示问题的错误标志,然后在显示菜单时显示错误消息。