在循环中调用两个Queue类函数

时间:2017-10-12 14:35:58

标签: c++ class loops queue

我的这个代码有问题。每当我调用类的两个函数时,在那些类中,有if-else语句,并在屏幕上打印输出,它只会运行两个函数的if子句而不是else。我该如何解决这个问题?

例如: 这是我的Queue.h文件:

#ifndef QUEUE_H
#define QUEUE_H

class Queue {
private:
    //private variables
    int arr_size;
    char *arr;
    int head;
    int tail;
    int count;
public:
    Queue(int); //constructor
             //functions
    int enqueue(char);
    int dequeue(char&);
};
#endif

这是我的Queue.cpp文件:

#include <iostream>
#include "Queue.h"
using namespace std;
Queue::Queue(int size) {
    //initializing
    arr_size = size;
    arr = new char[size];
    for (int i = 0; i < arr_size; i++) {
        arr[i] = NULL;
    }
    head = 0;
    tail = 0;
    count = 0;
}
int Queue::enqueue(char value) {
    if (count<arr_size) //if array is not full, execute below
    {
        arr[tail++] = value;  //pass value of first-to-last element in array
        count++; //counting the input value
        cout << "\nEnqueue Value: "<< arr[tail-1];
        return 0;
    }
    else {
        tail = 0;
        cout << "\nArray is full. Value cannot be write: " << value;
        return -1;
    }
}
int Queue::dequeue(char &read_val) {
    if (count !=0) { //if array has elements, execute below
        read_val = arr[head]; //pass-by-reference the value of first-to-last element in array to parameter of function
        cout <<"\nDequeue Value: "<<read_val;
        arr[head] = NULL;
        count--;
        if (head++ == arr_size) {
            head = 0;
        }
        return 0;
    }
    else if (count ==0) {
        cout << "\nArray is empty. Cannot be dequeue";
        return -1;
    }
}

这就是我的源文件:

#include "Queue.h"
#include <iostream>
using namespace std;
int main() {
    int n;
    cout << "Please enter the desired size of the array: ";
    cin >> n;
    char read_val = NULL;
    Queue myqueue(n);
    char arr[] = "Hello World, this is ELEC3150";
    int size = sizeof(arr)-1; 
    int count = 0;
    for (int i = 0; i < 5; i++) {
        myqueue.enqueue(arr[count]);
        count++;
        myqueue.dequeue(read_val);
    }

如果我输入数组的大小小于5,它必须在enqueue函数中打印错误消息,说明数组已满,并且数组在出列函数中为空,但没有。

1 个答案:

答案 0 :(得分:0)

我现在明白了。因为我试图排队5个角色然后出列5个角色。重复,直到我的主阵列arr结束。因此,如果我将dequeue和enqueue分成2个单独的for循环,在while循环中,它仍然存在。