getchar() nach scanf();
-
Aloha allerseits,
ich habe begonnen, mir ein bißchen C anzueignen. Nun hab ich zu Beginn beim Testen gleich das erste Problem.
Nachdem ich eine Eingabe mit scanf() erfragt habe möchte ich sie ausgeben. Schließlich hab ich am Ende des Programms noch ein getchar(), damit sich die Konsole bei Windows nicht sofort wieder schließt.
Bei dem Programm bekomm ich nun aber nur das Konsolenfenster bis zum Zeitpunkt der Eingabebestätigung zu sehen, danach schließt es sich, so dass also getchar() nicht ausgeführt wird ?! Öffne ich die Eingabeaufforderung so und starte das Programm von da aus, so bekomm ich das Programm bis zum Ende zu sehen, also auch die Ausgabe nach der Eingabe. Warum wird scheinbar die Funktion getchar() nicht ausgeführt, und wie erzwing ich bei Kompilieren und Starten des Programms aus einer IDE, dass das Fenster am Ende des Programms solang geöffnet bleibt, bis ich ein Enter eingegeben hab?mfg chuqa
-
Hallo,
Chuqa schrieb:
ich habe begonnen, mir ein bißchen C anzueignen. Nun hab ich zu Beginn beim Testen gleich das erste Problem.
Nachdem ich eine Eingabe mit scanf() erfragt habe möchte ich sie ausgeben. Schließlich hab ich am Ende des Programms noch ein getchar(), damit sich die Konsole bei Windows nicht sofort wieder schließt.
Bei dem Programm bekomm ich nun aber nur das Konsolenfenster bis zum Zeitpunkt der Eingabebestätigung zu sehen, danach schließt es sich, so dass also getchar() nicht ausgeführt wird ?!getchar wird ausgeführt, allerdings bekommt es das '\n' Zeichen, welches scanf nicht rauszieht. Das bleibt im Puffer hängen und wird dann von getchar() rausgeholt, deshalb schließt sich dein Programm.
Du kannst das z.B. folgendermaßen umgehen:
#include <stdio.h> //Zieht alle Zeichen aus stdin raus void clearStdin() { int c; while ((c=getchar())!='\n' && c != EOF); }; int main(void) { int i,j,k; scanf("%d", &i); clearStdin(); scanf("%d", &j); clearStdin(); scanf("%d", &k); clearStdin(); //usw. return 0; };
Ich weiß, nicht schön, aber so sieht's halt aus, mit Standard C
Um das Schließen der Konsole zu verhindern, findest du in der FAQ etwas zum Lesen: http://www.c-plusplus.net/forum/viewtopic-var-t-is-111042.html
-
Jo danke,
ich hätte auch einfach mal nur in meiner Literatur weiterlesen können, da wurde genau das Problem beschrieben, dort wurde es mittels fflush(stdin) gelöst.
also nochmal danke ;).
mfg chuqa
-
Chuqa schrieb:
dort wurde es mittels fflush(stdin) gelöst.
kick deine Literatur in die Mülltonne. fflush(stdin) ist gar keine gute Idee: http://www.c-plusplus.net/forum/viewtopic.php?t=39349
MfG
GPC
-
hehe,
es wurden da noch mehr Möglichkeiten gezeigt, aber gut, ich glaub, ich nehm deine Möglichkeit ;).
Ist ja schonmal gut zu wissen, dass das so ist, thx.mfg chuqa