Getchar() Probleme...
-
Hallo Leute,
ich wollte mal fragen ob mir jemand sagen kann wieso es problematisch ist getschar() oder gets() und scanf() in einem programm zu benutzen.
Ich meine wenn ich nur einmal diese Funktion benutze dann ist alles in ordnung, aber beim zweiten mal ignoriert er die Abfrage einfach.
Rein theoretisch hilft es einfach wenn ich diese "Abfrage" doppelt hinschreibe, jedoch denke ich wird jeder verstehen wenn ich sage, das ist keine Lösung für mich.
Deswegen bitte ich um zwei hilfestellungen:
1. Wieso geschieht sowas überhaupt?
2. Wie kann ich das umgehen oder verbessern?Ich danke schon im vorraus für eure Hilfe!
-
Nach dem scanf-Aufruf steht ein '\n' von deiner Bestätigung im Tastaturpuffer, da dieses Zeichen ja nicht in deinem einzulesenden String steht.
Beim nächsten scanf-Aufruf bekommt die Funktion das vorhergehende '\n' und wird
scheinbar überlaufen. Um das zu verhindern, könnte man z. B. nach jedem scanf etc.
einwhile(getchar()!='\n');
machen.
-
Gibt es eventuell noch eine andere Möglichkeit?
Ich meine, jedes mal wenn ich diese Funktionen aufrufen werde, dan werde ich die while schleife schreiben müssen....
-
Pack's in 'ne Funktion.
-
Werde ich mal versuchen.
Danke!
-
du kannst scanf() auch anweisen, den rest der zeile zu überlesen. ist allerdings ein bißchen kompliziert:
scanf("%d%*[^\n]%*[\n]",&i);
"%[^\n]" weist scanf() an, alles bis auf das new-line zu überlesen und "%[\n]" überliest das new-line selbst.
-
ja nur um ehrlich zu sein scanf funktioniert eigentlich immer
nur eben gets und co haben diese Probleme.
-
gets() solltest du eh nicht nehmen. Besser ist fgets().
-
auch bei einem normalen abfragen? (Also nicht bei einer File)
was ist mit dem getchar()?
-
getchar() ist das selbe wie fgetc(stdin).
damit wir dir helfen können, mußt du den fehlerhaften code hier posten. nie ursache für den fehler kann nämlich so ziemlich alles ein. muß noch nicht einmal an gets() liegen.
ansonsten gilt im zweifelsfall das, was curry-king geschrieben hat.
-
Code der gets() enthält ist per Definition fehlerhaft.
-
s/fehlerhaft/falsch/
-
Einigen wir uns auf "kaputt"?
-