2017-01-27 2 views
0

Jedes Mal, wenn ich mein Programm starte, wiederholt sich die Ausgabe in der ersten Zeile der do while-Schleife. Daher wird die Ausgabe "Enter characters to add ..." am Anfang jeder Schleife zweimal ausgegeben. Wie mache ich es nur einmal bei jeder Schleifenwiederholung ausgeben?Do While-Schleife Wiederholung Cout-Linie zweimal jede Schleife?

Hauptdatei

#include "LinkedList.h" 
#include "ListNode.h" 
#include "Node.h" 
#include <iostream> 
#include <stdlib.h> 
using namespace std; 

LinkedList<char> *setUpSentence() { 
    //allocate the linked list objet 
    LinkedList<char> *sentence = new LinkedList<char>(); 
    char ch; 
    do { 
     cout << "Enter characters to add, enter full stop to finish adding." << endl; 
     ch = cin.get(); 
     sentence->addAtEnd(ch); 
    } while (ch != '.'); 

    return sentence; 
} 

int main() { 

    //call the function, store the returned pointer in sentence variable 
    LinkedList<char> *sentence = setUpSentence(); 

    while(sentence->size > 0) { 
     cout << sentence->removeAtFront() << endl; 
    } 
    //delete to avoid memory leak 
    delete sentence; 

} 
+3

Unrelated: 'LinkedList * Satz = new LinkedList ();' ist nicht notwendig, verwenden Sie einfach 'LinkedList Satz;' stattdessen und später gibt es nach Wert zurück. –

+7

''\ n'' ist ein Zeichen. – melpomene

+1

In Bezug auf Ihre eigentliche Frage: Bitte [bearbeiten] Sie Ihre Frage, um eine [MCVE] zur Verfügung zu stellen. –

Antwort

4

Das Problem ist hier ch = cin.get();. Es liest automatisch, was im Eingabestrom noch übrig ist. Sie müssen es zuerst mit this reinigen.

-1

Ihr Programm liest vom Standard-Eingangspuffer. Lesen Sie mehr dazu in "What is the standard input buffer?"

Wenn Sie nur einmal "cout" zu wiederholen, es wie folgt umschreiben:

char ch; 
cout <<"char"<<ch<< "Enter characters to add, enter full stop to finish adding." << endl; 
do { 
    ch = cin.get(); 
} while (ch != '.');