2017-10-12 4 views
0

J'ai un problème avec ce code. Chaque fois que j'appelle deux fonctions de la classe, et dans cette classe, il y a une instruction if-else, et j'imprime la sortie à l'écran, cela ne fera qu'exécuter la clause if des deux fonctions et non l'autre. Comment puis-je réparer cela?Appel de deux fonctions de classe de file d'attente dans une boucle

Par exemple: Ceci est mon fichier 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 

Ceci est mon fichier 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; 
    } 
} 

Et voici ce que mon fichier source:

#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); 
    } 

Si je sais que la taille du tableau est inférieure à 5, il doit afficher le message d'erreur y est plein dans la fonction de mise en file d'attente et le tableau est vide dans la fonction dequeue, mais pas.

+0

Lire [Comment déboguer de petits programmes] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) par Eric Lippert. –

+0

Pourquoi 'main' a cette variable' count'? Pourquoi ne pas simplement utiliser myqueue.enqueue (arr [i]); ' –

+0

... et enfin, montrez-nous votre queue.h. Nous avons besoin d'un [mcve] –

Répondre

0

Je comprends maintenant. Parce que j'essayais de mettre en file d'attente 5 caractères puis dequeue 5 caractères. Répétez jusqu'à la fin de la rangée arr dans ma main. Donc, si je sépare la file d'attente et la file d'attente à 2 pour la boucle distincte, dans une boucle while, elle existe toujours.