C++ String mit samt leerzeichen einlesen!?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Die wird nicht übersprungen. cin liest den String in die *Name-Variablen ein und lässt dabei das Newline-Zeichen, das durch die ENTER-Taste ausgelöst wird, im Tastaturpuffer. Dann kommt getline() daher und denkt sich: 'Hey, cool, eine Eingabe. Die nehm' ich gleich mal mit.'

Du musst nach den cin-Befehlen den Tastaturpuffer leeren. Eine wirklich saubere, zuverlässige und portable Lösung ist leider keine ganz triviale Sache. Aber es sollte schon helfen, wenn du zwischen cin und getline() eine Dummy-Eingabe mit getline() einfügst, die das Newline-Zeichen abfängt, und dann erst dein 'richtiges' getline() benutzt.


greenvbuser 
Beitragsersteller
 12.09.2012, 22:12

Danke schonmal. Allerdings verstehe ich noch nicht ganz, wie du es meinst. Kannst du mal ein Beispiel Code hier einfügen??? wäre nett!

dergutekoenig  12.09.2012, 22:35
@greenvbuser
string dummy;
cin >> sourceName;
getline(cin, dummy);
getline(cin, sourcePath);

Nicht besonders elegant, sollte aber theoretisch funktionieren.

WhiteGandalf  13.09.2012, 13:01
@dergutekoenig

Noch besser: ALLES restlos mit getline abhandeln! Was STÖRT denn daran, ein einzelnes Wort, welches man EH (!) mit einem Enter abschließt - messerscharf exakt genau so wie einen langen Satz - AUCH als nix anderes als Satz erstmal einzulesen und sich dann schlicht drüber zu freuen, daß da nur ein einzelnes Wort drin steht?!

KISS: Keep It Stupid Simple!

In diesem Fall: Mach nicht für jeden Furz ein extra Verfahren! Mach alles nach ein und demselben Schema F!

Es sei denn, dieses Schema F würde sich irgendwo als hinderlich erweisen. Aber HIER kann von HINDERLICH wohl unmöglich die Rede sein, oder?!

sorry. jetzt sind sie weg, die &lt und &gt ;)