gpt4 book ai didi

C队列程序在满时不给出溢出错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:55:34 24 4
gpt4 key购买 nike

此程序在满时不会给出“队列溢出”错误消息。为什么会这样? qfull函数有问题吗?我什至试过 if(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;
}

最佳答案

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

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

关于C队列程序在满时不给出溢出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9043974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com