String mit Leerzeichen einlesen?
-
Hallo,
ich mache gerade ein kleines Programm, in dem man einen Namen für etwas eingeben
muss. Als ich früher mit C gearbeitet habe, konnte ich Strings mit Leerzeichen
immer mit Hilfe von fgets ( str, sizeof str, stdin ); oder gets ( str );
einlesen. Aber bei C++ scheint mein Programm den Funktionsaufruf einfach zu
ignorieren? Wenn ich fgets oder gets aufrufe, kann ich im Programm nichts
eingeben..Ich hoffe es kann mir jemand helfen!
Lg
SFandler
-
Oh habe mein Problem bereits gelöst..
Hatte nur fflush ( stdin ); vor dem fgets() aufrufen müssen!
Lg
SFandler
-
SFandler schrieb:
Hatte nur fflush ( stdin ); vor dem fgets() aufrufen müssen!
Nein, das ist undefiniertes Verhalten.
-
In C++ arbeitet man auch nicht mehr mit den C-IO-Deskriptoren (stdin etc), sondern mit IO-Streams (cin). Und das hast du als Äquivalent zu gets die Funktion std::getline().
PS: Dabei solltest du aber bedenken, daß nach der letzten Eingabe per Stream-Operator noch das abschließende ENTER im Tastaturpuffer steht und dadurch getline() mitunter nur den leeren String davor einliest.
-
Vielleicht hilft dir das hier ja als fflush() Ersatz:
std::istream& getLineWithText(std::istream& is, std::string& str) { while (std::isspace(is.get())) ; is.unget(); return std::getline(is, str); }