2017-10-12 1 views
0

Ich habe ein Problem mit diesem Code von mir. Immer wenn ich zwei Funktionen der Klasse anrufe und in diesen Klassen eine if-else-Anweisung gibt und die Ausgabe auf dem Bildschirm ausgibt, wird nur die if-Klausel der beiden Funktionen und nicht die else ausgeführt. Wie kann ich das beheben?Aufruf von zwei Queue-Klassenfunktion in einer Schleife

Zum Beispiel: Dies ist meine Queue.h Datei:

#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 

Das ist meine Queue.cpp Datei:

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

Und das ist, was meine Quelldatei:

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

Wenn ich die Größe des Arrays eingeben, um weniger als 5 zu sein, muss die Fehlermeldung die arra ausgeben y ist in der Enqueue-Funktion voll und das Array ist in der Dequeue-Funktion leer, tat dies aber nicht.

+0

Lesen Sie [Wie kleine Programme zu debuggen] (https://ericlippert.com/2014/03/05/how-to-debug-small-programs/) von Eric Lippert. –

+0

Warum hat 'main' diese Variable' count'? Warum nicht einfach 'myqueue.enqueue (arr [i]);' –

+0

... und schließlich, zeige uns deine queue.h. Wir benötigen eine [mcve] –

Antwort

0

Ich verstehe jetzt. Da ich versucht habe, 5 Zeichen in die Warteschlange zu stellen, entziehe ich 5 Zeichen aus der Warteschlange. Wiederholen Sie dies, bis das Ende des Arrays arr in meinem Hauptfenster ist. Also, wenn ich die Dequeue und die Enqueue auf 2 getrennt für die Schleife, in einer While-Schleife, es noch bestehen.

Verwandte Themen