Programm ignoriert scanf()
-
Du hast das missverstanden
Wenn du den Buchstaben abschickst und bestätigst, hast du 2 Zeichen geschickt -
einmal den Buchstaben/das Zeichen und beim abschicken die dicke Taste macht \n
letztere wird nicht verarbeitet und behauptet beim nächsten Durchlauf von scanf,
\n hab ich noch und du brauchst nix einzugeben.MfG f.-th.
-
hm scheint als würde bei windows automatisch geflusht werden ?
weil bei mir läuft der code (MingW kompilliert)
-
Hm, bei mir wirds komischerweise nicht automatisch geflusht. MS Visual Studio.
Ah, es liegt also daran, dass noch ein '\n' im Tastaturpuffer liegt. Danke auf jeden Fall für die Erklärung, ich werd mithilfe von fflush() den Tastaturpuffer leeren, dann funktionierts auch im zweiten Durchlauf.
Danke nochmal, besonders für die Links.
-
Nein, bei Windows wird das nicht automatisch geflusht. Microsoft hat sich für den Fall eine Erweiterung von C einfallen lassen, die nur die hauseigenen Compiler kennen. Siehe MSDN.
In den Links von Basicman siehst du einige Links, die versuchen das Problem anzugehen.
MfG f.-th.
-
Vichy schrieb:
ich werd mithilfe von fflush() den Tastaturpuffer leeren...
schau dir doch bitte mal das manual zu fflush() an. und auf welche dateien das verwendet werden darf.
-
dann ists aber seltsam, dass ich keinen flush brauche, wenn ich das mit mingw kompilliere.
-
schau dir doch bitte mal das manual zu fflush() an. und auf welche dateien das verwendet werden darf.
Werde ich machen, ich hab mir bisher nur den 2.Link von Basicman durchgelesen.
Da wird erklärt das man durch löschen den Tastaturpuffers mithilfe von fflush(stdin), kein '\n' mehr drinnen hat, was ja die Lösung zu meinem Problem is.
-
[url=http://www.kernel.org/doc/man-pages/online/pages/man3/fflush.3.html]fflush()
[/url]CONFORMING TO top C89, C99, POSIX.1-2001, POSIX.1-2008. The standards do not specify the behavior for input streams. Most other implementations behave the same as Linux.
-
Die Microsoftlösung:
http://msdn.microsoft.com/en-us/library/9yky46tz(VS.71).aspxDa ich bisher noch keine Info habe von den anderen Compilern und das in C89 oder C99 nicht geregelt ist, ist die Lösung für andere Compiler nicht zu empfehlen.
-
Ich bin mal neugierig - wenn ihr statt:
scanf("%c", &direction);
folgende Zeile setzt:
cc=scanf("%c", &direction); // in cc sollte die Anzahl der eingegebenen Zeichen stehen printf("Eingelesene Zeichen: %i\n", cc);
arbeiten eure Compiler dann so, wie erwarten sein sollte.
gcc 4.4.1 erste: stdin-Fehler <-> zweite: okay
digital mars 8.52 beide okayAch ja:
int cc; // sollt ja klar sein
MfG f.-th.
-
Da hatte auch jemand eine Idee:
http://www-ai.math.uni-wuppertal.de/~schaefer/infoI_WS09/handouts/scanf.pdf