Hey all. I'm making a simple program to enqueue and dequeue a string of characters as entered into an array. I'm fairly close to completing the code but I've run into a bit of difficulty. After a certain number of enqueues/dequeues the operation seems to break down to the point where it doesn't display some of the members of the queue. Here's the code... and then with an example of what I mean.
A sample output after several enqueue/dequeue progressions (my "notes" are in bold):Code:void enqueue (char queue[], int &in, int &full) { char ch; if (in == 4) { in = 0; } if (full == 5) { cout << "Enqueue: Queue is full.\n\n"; } else { cout << "Enqueue: "; cin >> ch; cout << endl; queue[in] = ch; in++, full++; } } void dequeue (char queue[], int &out, int &full) { char ch; if (out == 4) { out = 0; } if (full == 1) { cout << "Dequeue: Queue is empty.\n"; } else { ch = queue[out]; cout << "Dequeue: " << ch << endl; out++, full--; } } void display (char queue[], int &out, int &full) { cout << "Queue status:"; if (full == 1) { cout << " Empty"; } for (int i = out; i <= (full+1); i++) { cout << " " << queue[i]; } cout << endl << endl; } main () { char selection ; char mainqueue[4] ; int n = 0, d = 0; int full = 1; /* Declare and initialize various counters. */ cout << endl ; cout << "Enter e to enqueue, d to dequeue or q to quit." ; cout << endl << endl << "e, d or q: " ; cin >> selection ; while ( ( selection == 'e' ) || ( selection == 'd' ) ) { switch ( selection ) { case 'e' : enqueue (mainqueue, n, full); break ; case 'd' : dequeue (mainqueue, d, full); break ; } display (mainqueue, d, full) ; cout << "e, d or q: " ; cin >> selection ; } }
Basically, it doesn't display the queue after I've enqueued/dequeued a full (read: 4-element) queue. It was deemed to be a "circular" queue too. Any advice?Code:Enter e to enqueue, d to dequeue or q to quit. FIRST RUN e, d or q: e Enqueue: a Queue status: a SECOND RUN e, d or q: e Enqueue: b Queue status: a b THIRD RUN e, d or q: e Enqueue: c Queue status: a b c FOURTH RUN e, d or q: e Enqueue: d Queue status: a b c d FIFTH RUN e, d or q: e Enqueue: Queue is full. Queue status: a b c d SIXTH RUN e, d or q: d Dequeue: a Queue status: b c d SEVENTH RUN e, d or q: d Dequeue: b Queue status: c d EIGHTH RUN e, d or q: d Dequeue: c Queue status: d NINTH RUN e, d or q: d Dequeue: d Queue status: Empty TENTH RUN -- HERE'S WHERE IT BREAKS DOWN e, d or q: e Enqueue: g Queue status: Should output a "g" here... ELEVENTH RUN e, d or q: e Enqueue: g Queue status: Should output "g g" here TWELFTH RUN e, d or q: e Enqueue: k Queue status: Should show "g g k"... THIRTEENTH RUN e, d or q: e Enqueue: l Queue status: Should show "g g k l"... RUN 14 e, d or q: e Enqueue: Queue is full. Queue status: Doesn't display queue again. RUN 15 e, d or q: d Dequeue: g Queue status: g k l e, d or q: d Dequeue: g Queue status: k l e, d or q: d Dequeue: k Queue status: l e, d or q: d Dequeue: l Queue status: Empty e, d or q: q It runs fine for the dequeue as far as displaying the queue.



LinkBack URL
About LinkBacks




I'm not even going to pretend I'm a great programmer... I'm going off hunches when I do these first off and then I have to go back and fix them once I see they're incorrect... and sometimes the errors aren't obvious to me. haha