Frage zu cin.get()
-
Hallo Leute.
Ich habe mal eine Frage zu dem folgenden Code-Beispiel:#include <iostream> // stellt die Globalen Objekte bereit , cout , cin , cerr , clog using namespace std ; int main (int argc, char * const argv[]) { char ch ; while((ch = cin.get()) != EOF) { cout << "ch: " << ch << endl; } cout << "\n FINISHED " << endl; return 0; }Starte ich das Programm werde ich ja erst einmal aufgefordert eine Eingabe zu machen . Bei dieser Eingabe kann ich komischer Weise beliebig viele Zeichen eingeben . Bis jetzt weiß ich das cin.get() meine eingegebenen Zeichen in einem Puffer speichert. Beende ich meine Eingabe mit Enter werden meine gesamten eingegebenen chars ausgegeben. Wie ist dies aber Programmtechnisch zu verstehen.
Irgendwie ist mir nicht klar wie das Programm mit diesem Puffer arbeitet.
Wird sich hier ein char nach dem anderen aus dem Puffer geholt .. ?
-
Also liefert cin.get() immer den Wert meines zuerst eingebenen Zeichens welches im Puffer liegt ? Dieses wird dann aus dem Puffer entfernt und cin.get() liefert das nachfolgende ?
Habe ich das so richtig verstanden ?
-
cin.get() macht da ersteinmal gar nichts. cin hängt an der Standardeingabe und wartet bis über diese eine Eingabe kommt. Die Standardeingabe ist bei dir offenbar eine Konsole mit Tastatur. Und deren Eingabeverhalten ist das was du hier beobachtest. Konsolen geben die Eingabe in der Regel nämlich erst dann an die Standardeingabe weiter, wenn die Entertaste gedrückt wurde. Das ist in der Regel auch sinnvoll, da man bei Konsolen meistens zeilenorientiert arbeitet und da ist es schön, wenn man die Zeile noch editieren kann, bevor man sie abschickt. Und wenn die Zeile abgeschickt ist, dann liegt sie natürlich auch gleich als ganzes in der Standardeingabe vor. Das heißt, nun wird dein cin.get() aktiv, weil ein Zeichen da ist. Dieses wird dann gelesen und aus dem Standardeingabestrom entfernt.
Wenn du eine andere Standardeingabe benutzt oder die Einstellungen deiner Konsole änderst, wirst du feststellen, dass dieses Verhalten sich ändert.