002
27.04.2008, 23:36 Uhr
0xdeadbeef
Gott (Operator)
|
Wenn der Benutzer in der Konsole z.B. 123<return> eingibt, befinden sich im Eingabepuffer danach die Zeichen "123\n" - scanf("%d", &n); liest "123" aus dem Eingabepuffer, übrig bleibt "\n", und wenn danach fgets aufgerufen wird, liest das bis zum nächsten "\n", was in diesem Fall auf eine leere Zeile hinausläuft. Gibt der Benutzer stattdessen z.B. "123 abc<return>" ein, liest fgets danach " abc\n" aus dem Puffer.
Es ist in diesem Zusammenhang sinnvoll, die Benutzereingaben zeilenweise zu verarbeiten, weil der Benutzer auch in Zeilen denkt. Das heißt, zum Einlesen einer Zahl:
C++: |
#include <stdio.h> #include <string.h>
int main() { char zeile[100]; int n; char s[100];
printf("Zahl eingeben: "); fflush(stdout); fgets(zeile, 100, stdin); /* Zeile einlesen */ sscanf(zeile, "%d", &n); /* Zahl aus der Zeile parsen */
printf("String eingeben: "); fflush(stdout); /* kein Problem hier, weil keine Zeichen im Eingabepuffer übrig sind. */ fgets(s, 100, stdin); }
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |