fuktioniert die C-Funktion fflush(); nicht bei Sid/Sarge?
Hallo Liste,
ich stecke gerade mitten in meinem Einstieg in der C-Programmierung und
bin nun zur Bibliotheksfunktion fflush(); vorgedrungen, die mir
eigentlich bei 'fflush(stdin);' den Müll aus stdin löschen soll, der
fälschlich vom Anwender eingegeben wurde.
Das klappt aber nicht. Kann es sein, dass da ein Fehler in der aktuellen
C-Version bei Sarge/Sid enthalten ist? - Oder kann es noch an etwas
anderm liegen?
Also, das kleine Übungsprogrammchen häng ich mal unten dran - für den
Fall das es doch ein bloßer, unsinniger Tippfehler meinerseits ist.
Manchmal sieht man ihn ja nicht, selbst wenn man direkt draufglotzt.
Ich danke Euch für Eure Hilfe.
Code:
/* Beispiel für den Einsatz von scanf(). */
#include <stdio.h>
/* Ersatz für fflush() */
void flush_stdin(void);
int main(void)
{
int i1, i2;
long l1;
double d1;
char puffer1[80], puffer2[120];
/* Mit dem Modifizierer l long-Integer und double-Werte einlesen. */
puts("Geben Sie einen Integer und eine Fliesskommazahl ein.");
scanf("%ld %lf", &l1, &d1);
printf("Ihre Eingabe lautete %ld %lf.\n", l1, d1);
puts("Der Formatstring von scanf() verwendete den Modifizierer l,");
puts("um die Eingabe in long- und double-Werte zu speichern.\n");
/* fflush(stdin); - funktioniert nicht */
flush_stdin();
/* Aufsplittung der Eingabe durch Angabe von Feldlängen. */
puts("Geben Sie einen Integer aus 5 Ziffern ein (z.B. 54321).");
scanf("%2d%3d", &i1, &i2);
printf("\nIhre Eingabe lautete %d und %d.\n", i1, i2);
puts("Der Feldlaengensprezifizierer in dem Formatstring von scanf()");
puts("splittete Ihre Eingabe in zwei Werte auf.\n");
/* fflush(stdin); - funktioniert nicht */
flush_stdin();
/* Verwendet ein ausgeschlossenes Leerzeichen, um eine */
/* Eingabezeile beim Leerzeichen in zwei Strings aufzuteilen. */
puts("Geben Sie Vor- und Nachnamen getrennt durch Leerzeichen ein.");
scanf("%[^ ]%s", puffer1, puffer2);
printf("Ihr Vorname lautet %s\n", puffer1);
printf("Ihr Nachname lautet %s\n", puffer2);
puts("[^ ] in dem Formatstring von scanf() hat durch Ausschliessen");
puts("des Leerzeichens die Aufsplittung der Eingabe bewirkt.");
return 0;
}
void flush_stdin(void)
{
char muell[80];
fgets(muell,80,stdin);
}
--
Schöne Grüße
Jochen
---
Linux-User #357813 with the Linux Counter, http://counter.li.org/
ICQ: 164338222
Für Debian-User-German:
Haeufig gestellte Fragen und Antworten (FAQ):
http://www.de.debian.org/debian-user-german-FAQ/
Zum AUSTRAGEN schicken Sie eine Mail an
mailto:debian-user-german-request@lists.debian.org
mit dem Subject "unsubscribe".
Probleme? Mail an listmaster@lists.debian.org (engl)
Für BeLUG:
mailto:linux-l@mlists.in-berlin.de
Die Mailingliste der BeLUG (Berliner Linux User Group)
Wenn du diese Mailingliste abbestellen willst, gehe bitte auf
https://mlists.in-berlin.de/mailman/listinfo/linux-l
und trage dich dort aus.
Reply to: