Benutzereingaben von der Konsole in C
Ich bin ein absoluter Anfänger in C-Programmierung, also bitte etwas Geduld mit mir. Ich versuche zur Eingabe eines Dateinamen vom Benutzer in der Konsole, und ich will zu drucken, die eine hilfreiche Nachricht, dass der Benutzer aufgefordert wird, geben Sie den Dateinamen an, die er öffnen will. Aber wenn ich das in der Eingabeaufforderung eingeben, wird der cursor wartet auf die Eingabe der ersten und nachdem ich geben Sie text ein und drücken Sie die EINGABETASTE, sehe ich das hilfreich prompt, dass ich etwas drucken wollte, vor dem Eingang. Hier ist das code-snippet.
char filename[40];
fputs("enter the file name: ", stdout);
fflush(stdout);
fgets(filename, sizeof(filename), stdin);
Ich kann nicht sehen, wohin ich gehe falsch mit diesem. Ich wäre wirklich dankbar, wenn jemand erklären könnte, warum dies geschieht.
Um näher auf mein problem. Ich bin versucht zu konvertieren, das C-Programm in gnuarm Assembler-code. Also ich nutze den gcc-compiler aus der gnu-toolchain aus den Armen-website. Ich glaube nicht, dass es sollte egal, aber dann weiß ich nicht, wie man dieses Problem beheben. Das scheint so trivial.
Dieser C-code sieht gut aus. Es würde scheinen, wie Sie Ihre
stdout
nicht ordnungsgemäß geleert, obwohl Sie es beantragt. Ich würde vermuten, dass die stdio-Bibliothek hat einige Macken in dieser Hinsicht.In dem OS? Können Sie pl. überprüfen Sie den Rückgabewert von fflush, wenn es 0 ist?
Ich habe deine code und fügte hinzu, printf("%s\n",filename); am Ende, kompiliert und lief. Es druckt den Dateinamen habe ich eingegeben. Ist es nicht dies, was Sie bekommen?
InformationsquelleAutor Vivek Pradhan | 2012-08-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehe ich keine Probleme mit dem code, den Sie eingefügt haben, funktioniert mit gcc. Es muss etwas zu tun mit dem stdout nicht gespült werden, die spezifisch für den compiler, den Sie verwenden...
InformationsquelleAutor Curious
Dieser funktioniert bei mir mit
gcc version 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
:Auf einem *nix-Maschine, die bei der Montage zu Lesen und zu schreiben:
Dies ist eine Windows-Montage bekam ich von einem Lehrer:
Ich denke, das problem ist, dass die Ausgabe nicht immer geleert, wenn ich nicht angeben, wird '\n' printf-Anweisungen vor dem scanf. Ich denke, das ist, warum die Konsole erwartet mich zu schlagen zurück. Also, wenn ich ein printf mit '\n', habe ich diese zu arbeiten. Aber ich weiß immer noch nicht genau wissen, warum. Kann jemand erklären? Es wird eine große Hilfe sein
Das scheint eher ein Problem mit dem compiler, Bibliotheken oder target-Plattform. Ich habe noch nie etwas gesehen, wie dies vor. Ist dies für ein android-Gerät?
InformationsquelleAutor Ethan Reesor