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.
Lire [Comment déboguer de petits programmes] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) par Eric Lippert. –
Pourquoi 'main' a cette variable' count'? Pourquoi ne pas simplement utiliser myqueue.enqueue (arr [i]); ' –
... et enfin, montrez-nous votre queue.h. Nous avons besoin d'un [mcve] –