Eingabeproblem
-
Also ich will Daten eingeben lassen und diese dann in einer Struktur speichern.
Aber ich kann nur ein Wort eingeben, weil wenn ich mehr als ein Wort reinschreibe er dieses Wort für die nächste Eingabe verwendet.
meine Struktur:
typedef struct { char spielname[30]; char genre[20]; int erscheinungsjahr; char firma[30]; }spiele;
cin >> daten->spielname;
Die Eingabe geschieht also über cin.....
warum kann man halt nur ein Wort eingeben ?
Liegt das am String selbst oder muss ich da einen anderen Befehl benutzen für die Eingabe ?
-
cHillb3rT schrieb:
cin >> daten->spielname;
Die Eingabe geschieht also über cin.....
[...]
Liegt das am String selbst oder muss ich da einen anderen Befehl benutzen für die Eingabe ?
Das liegt an cin. Cin liest nämlich nur vom ersten Nicht-Blank bis zum nächsten Blank. D.h. bei Eingabe von
hallo liebe Oma
liest cin "hallo" und stößt dann auf das ' '-Zeichen und bricht so das lesen ab (der Rest nach dem "Hallo" bleibt im Puffer stehen).
Lösung:
nimm cin.getline(char*, size_t, char = '\n') (oder für std::strings die globale Funktion getline(stream, std::string))In deinem Falle also
cin.getline(daten->spielername, 19);
/edit: Siehe dazu eventuell auch http://www.cppreference.com/cppio, insbesondere http://cppreference.com/cppio/getline.html.
Caipi
-
Wenn ich das "cin.getline" benutze, dann überspringt er die Eingabe komplett und geht gleich zur zweiten....
hmmmm.... komisch.... ich weiß net woran das genau liegt !
-
Wahrscheinlich steht noch ein '\n' im Puffer... und weil cin.getline() standardmäßig nur bis zum ersten '\n' liest fängt es quasi garnicht mit dem lesen an.
Hast du vorher zufällig einen Wert mit cin eingelesen? (Dann wäre es kein Wunder ;))Lösung: Puffer vor dem Aufruf der Methode cin.getline() leeren. Z.B. mit cin.ignore(cin.rdbuf() -> in_avail()); oder sofern nur das '\n'-Zeichen dort steht reicht auch ein cin.get();
Siehe dazu eventuell auch nochmal http://www.cppreference.com/cppio
Caipi
-
ah cool... das wars
@ Caipi:
Du kennst dich gut aus