Programm ignoriert scanf()
-
Vichy schrieb:
Brauch kein '\n', die Formatierung ist mir erstmal nicht so wichtig. Mich würd eher interessieren warum er mich beim zweiten Durchlauf einfach nicht eingeben laesst und zwei mal "Enter direction command: " hitnereinander ausgibt und mich dann erst eingeben laesst.
Wenn du über die Konsole dein Zeichen eingibst, dann drückst du wohl "Enter" zum bestätigen und Schwupps ... schon hast du ein a\n eingegeben
http://www.c-plusplus.net/forum/39349
http://www.hs-augsburg.de/~sandman/c_von_a_bis_z/c_005_001.htm#Xxx999339
-
sicher dass dein quellcode genauso aussieht? weil
1. sehe ich keinen grund warum er beim 2. durchlauf scanf "vergisst"
2. habe ich deinen Code durch meinen C Compiler gejagt (vorher noch char direction; deklariert) und es läuft wie es laufen soll.
-
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