2012-01-28 27 views
1

该程序在其填满时未给出“队列溢出”错误消息。为什么? qfull功能有问题吗?我甚至尝试过(qfull(* r)== 1)。即使那时它不工作。它只是继续接受数字,即使它充满。C队列程序未发出满溢错误时

#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

的问题是,调用clrscr从屏幕上清除错误消息,所以你只是没有看到该消息。如果您删除了clrscr,我相信您会在新菜单绘制到屏幕之前看到消息。

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

+0

是的我猜这是问题,getch();打印后队列溢出解决了问题。谢谢 :) – 2012-01-28 13:29:02