Frage zur Standardeingabe
-
Hallo!
Ich habe eine Frage. Bei folgendem Programmkonstrukt soll sichergestellt werden, dass nur Zahlen eingelesen werden.
while(scanf("%d", &sel_op) !=1) {/* Wenn scanf keine reine Zahl liefert */ int c; while((c = getchar()) != EOF) { if(isdigit(c)) { ungetc(c, stdin); break; } } }
Was ich nicht verstehe: Mit scanf liest man doch von der Standardeingabe. Anschließend liest getchar aber nochmal das erste Zeichen, obwohl scanf es doch schon eingelesen hat.
In diesem Beispiel:
int a; scanf("%d", &a); int b = getchar(); putchar(b);
... liefert getchar kein Zeichen mehr, weil scanf es ja schon von der Standardeingabe geholt hat. Das ist ja auch logisch, aber warum ist das im oberen Beispiel nicht genauso?
-
Du musst doch nur überprüfen, was scanf zurückgibt. Der Rückgabewert ist nämlich die Anzahl gelesener passender Ausdrücke, in deinem Fall also Zahlen. Wenn die Rückgabe 0 ist, wurde eben keine Zahl eingegeben.