【发布时间】:2016-12-05 19:34:53
【问题描述】:
当我运行删除函数时,它给了我一些无限的垃圾值。有什么问题?
#include<iostream>
#include<process.h>
#include<conio.h>
using namespace std;
class circularqueue
{
int arr[5];
int front,rear;
int size;
int count;
public:
circularqueue()
{
count = -1;
front=-1;
rear=-1;
size=5;
}
void display();
void enqueue(int val);
void delete_element();
bool Is_empty();
};
bool circularqueue::Is_empty(){
if(front == -1 && rear == -1){
return true;
}
else {
return false;
}
}
void circularqueue :: display()
{
int F = front;
for(count; count!=0;count--){
cout<<"-----------"<<endl;
cout<<"ID is : "<<arr[F]<<endl;
cout<<"-----------"<<endl;
F++;
if(count == (size-1)){
F=0;
}
else if(count == -1){
cout<<"Empty"<<endl;
}
}
}
void circularqueue :: enqueue(int val)
{
if(Is_empty()){
// cout<<"Queue is empty "<<endl;
++front;
++rear;
arr[rear] = val;
}
else if(front == 0 and rear == (size-1)){
cout<<"Queue is Full"<<endl;
}
else if(front==0 && rear == 0){
if(rear<=(size-1)){
arr[rear]= val;
rear = rear+1;
}
}
else if(front!=0 && rear == (size-1)){
rear=0;
arr[rear]=val;
rear =rear+1;
}
else {
arr[rear] = val;
rear=rear+1;
}
count++;
}
当我运行此代码时,删除功能无法正常工作,请告诉我修复方法。
它给了我一些垃圾值,它看起来像一个无限循环
void circularqueue :: delete_element()
{
if(Is_empty()){
cout<<"The Queue is empty"<<endl;
}
else if(front==(size-1)){
front = 0;
}
else if(front == rear){
front = -1;
rear = -1;
}
else
{
cout<<"Number Deleted : "<<front<<endl;
front = front+1;
}
count--;
}
int main()
{
circularqueue obj;
int num;
int ch;
char ch1;
jb: cout<<" 1 - EnQUEue 2- DeQueue 3- Display"<<endl;
cin>>ch;
switch(ch){
case 1:{
cout<<"Enter Number : "<<endl;
cin>>num;
obj.enqueue(num);
cout<<"Return to Main Menu: "<<endl;
cin>>ch1;
if(ch1=='Y'|| ch1=='y'){
system("cls");
goto jb;
}
break;
}
case 2:{
obj.delete_element();
cout<<"Return to Main Menu: "<<endl;
cin>>ch1;
if(ch1=='Y'|| ch1=='y'){
system("cls");
goto jb;
}
break;
}
case 3:{
obj.display();
cout<<"Return to Main Menu: "<<endl;
cin>>ch1;
if(ch1=='Y'|| ch1=='y'){
system("cls");
goto jb;
}
break;
}
default :{
cout<<"Invalid entery "<<endl;
cout<<"Return to Main Menu: "<<endl;
cin>>ch1;
if(ch1=='Y'|| ch1=='y'){
system("cls");
goto jb;
}
break;
}
}
}
【问题讨论】:
-
你能把问题压缩一点吗?尝试指出您认为代码有什么问题,以便其他人更容易回答
-
谢谢通知,你只需要关注删除功能我认为有问题
-
在调试器中运行,你会发现问题不在于
delete_element,而在于display。 -
显示功能正常运行。但我曾经调用过删除函数,它开始给我无限的垃圾值
标签: c++ arrays data-structures queue