在main函数里面执行一个返回false的函数过程中遇到的坑

如下:

#include<iostream>
#include"queue.h"
using namespace std;
int main() {
   Queue<int> q(7);
   q.EnQueue(0);
   q.disPlay();
   q.EnQueue(1);
   q.disPlay();
   q.EnQueue(2);
   q.disPlay();
   q.EnQueue(3);
   q.disPlay();
   q.EnQueue(4);
   q.disPlay();
   q.EnQueue(5);
   q.disPlay();
   q.EnQueue(6);
   q.disPlay();
   q.EnQueue(7);//该函数返回为false
   q.disPlay();
   return 0;
}

程序运行如下:

这里写图片描述
在执行q.EnQueue(7)的时候,该函数返回了一个false,这是意料之中的,但是没有想到的是,最后一个q.display();没有被执行。
这是为什么呢?
最开始我以为可能是q.EnQueue(7);返回了一个false,这可能相当于语句return 0;所以main函数提前结束。
可是当我写了另外一个函数来测试时,我发现了自己的错误。

#include<iostream>
#include"queue.h"
using namespace std;
bool is(int i);
int main() {
   /*
   Queue<int> q(7);
   q.EnQueue(0);
   q.disPlay();
   q.EnQueue(1);
   q.disPlay();
   q.EnQueue(2);
   q.disPlay();
   q.EnQueue(3);
   q.disPlay();
   q.EnQueue(4);
   q.disPlay();
   q.EnQueue(5);
   q.disPlay();
   q.EnQueue(6);
   q.disPlay();
   q.EnQueue(7);
   q.disPlay();
   */
   int i = 0;
   is(i);
   cout << "hello world!" << endl;
   return 0;
}
bool is(int i) {
   if (!i)
         return false;
   return true;
}

如上,程序运行的结果是:
这里写图片描述

这也就直接否定了我的猜测。
于是我去查看我的queue.h中是不是有逻辑错误,果然被我找到了。

template<class T>
void Queue<T>::disPlay() {
   if (!tag) {
         cout << "队列为空!" << endl;
         return;
   }
   for (int i = front;; i = (i + 1) % maxSize) {
         if (i == rear)
                break;
         cout << queue[i] << " ";
   }
   cout << endl;
}

在我的display()函数中忘记了考虑一个情况:当输出的队列本身就已经满了的情况下(也就是front==rear),这个循环直接就break;掉了,所以压根就不会执行最后一个display()函数。
所以改进如下:

template<class T>
void Queue<T>::disPlay() {
   if (!tag) {
         cout << "队列为空!" << endl;
         return;
   }
   if (front == rear&&tag) {
         for (int i = 0; i < maxSize; i++) {
                cout << queue[i] << " ";
         }
   }
   for (int i = front;; i = (i + 1) % maxSize) {
         if (i == rear)
                break;
         cout << queue[i] << " ";
   }
   cout << endl;
}

这回,程序该正常运行了吧,嘿嘿。
果不其然:
这里写图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值