PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C/C++: cin.get



Daniel666
20-02-2002, 20:03
Hallo




char text[5];
cin.get(text,4);



cin.get(text,4); sollte doch bewirken, dass der String "text" eingelesen wird, oder nicht? Bei mir ist das nämlich nicht der Fall, die Zeile wird anscheinend einfach ignoriert, also es passiert nichts, das Programm wird danach einfach beendet.
Gibt es da irgendwas zu beachten, das ich übersehen hab/nicht weiß, oder woran kann's liegen?

jgbauman
20-02-2002, 23:24
Ich weiss ja nicht was Du errechen willst, aber die Semantik von

cin.get(char *s, int n)

ist folgende:
Lese einzelne Zeichen aus cin und speichere sie hintereinader in s, bis eine der folgenden Bedingungen erfuellt ist.
- es wurden n-1 Zeichen gelesen.
- das naechste Zeichen waere '\n'
- das Dateiende ist erreicht.
Danach speichere ein abschliessendes '\0' in s.

Ich schaetze einfach das Du mehrmals mit cin.get() liest und da ein Aufruf von cin.get() ein '\n' im Eingabestrom niemals beseitig und immer mit 0 gelesenen Zeichen abbricht falls '\n' das naechste Zeichen, koennte das eine Erklaerung fuer deinen 'Fehler' sein.
Ein

if (cin.peek() == '\n') cin.get();

hinter jedem cin.get() koennte fuer Abhilfe sorgen.

Daniel666
21-02-2002, 14:41
Hallo

Also erreichen will ich damit eigentlich nichts, bin nur dabei mich mit C++ zu beschäftigen, und da kam mir dann dieses Problem.
Inzwischen habe ich auch die Lösung gefunden:
cin.get liest standardmäßig bis '\n' als Begrenzer eingegeben wird. Da ich die Funktion in ein Programm eingebaut hatte, hat er den Begrenzer immer aus dem Puffer gelesen und deshalb war also schon vor der eigentlichen Eingabe Schluss. Abhilfe brachte dann cin.ignore, liest ein Zeichen aus dem Puffer und "wirft" es dann weg.
Trotzdem danke für deine Hilfe.