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.

    http://www.c-plusplus.net/forum/39349



  • 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);
    }
    

Log in to reply