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