[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: