Linux: fgets in Schleife



  • Hallo!

    Eine Anfängerfrage bezüglich der Funktion
    fgets. Folgender Code

    (...) #define SIZE 1 (...)
    do {
      cout << "Wollen Sie Beenden (y/Y=ja)? ";
    
      //Problem - fgets wartet nicht auf Eingabe  
      fgets (cEingabe, SIZE, stdin);
    
    } while (cEingabe[0]!='y' && cEingabe[0]!='Y');
    

    resultiert unter LINUX in einer Endlosschleife; dh. fgets scheint nicht auf eine Eingabe des Users zu warten.
    Leider bin ich gezwungen, (1) eine derartige Schleife und (2) diese Funktion zu verwenden und nicht etwa die C++-Funktion cin.

    Bin für jeden Rat dankbar!



  • fgets() liest immer einen String ein. Der 2. Parameter gibt die Länge/Größe (SIZE) des empfangenden buffers (cEingabe). fgets() garantiert aber auch, dass damit eingelesene Strings immer nullterminiert sind. Da dein Zielbuffer aber nur 1 Zeichen lang ist (bzw. du ihn über SIZE auf 1 begrenzt) steht dort immer nur die '\0' drin. Und die ist bekanntlich ungleich 'y' oder 'Y' 😉

    Edit: Um weiteren Problemen vorzubeugen: fgets() speichert auch das '\n' mit, wenn der Buffer groß genug ist. Da stolpert man z.B. beim Stringvergleich mal gerne drüber.



  • Problem gelöst ... eigentlich naheliegend, wäre aber trotzdem nicht drauf gekommen... 🙂

    Herzlichen Dank!



  • Warum nimmst du nicht man: fgetc(3), wenn du eh nur an einem Zeichen interessiert bist?



  • rüdiger schrieb:

    Warum nimmst du nicht man: fgetc(3), wenn du eh nur an einem Zeichen interessiert bist?

    Hab ich ja total vergessen 😮 😃


Anmelden zum Antworten