kein fpurge in Cygwin
-
Guten Abend!
Ich habe in einem winzigen C-Programm die Funktion fpurge(stdin) benutzt, um die restlichen Zeichen (\n) nach einem scanf("%c",&c); aus dem Eingabestrom zu löschen, damit der nächste Aufruf von scanf nicht übersprungen wird.
Nun wollte ich dieses Programm unter Cygwin compilieren, aber dort gibt es kein fpurge, auch die man-pages kennen es dort nicht.
Mit fflush komme ich nicht weiter.
Was kann ich denn tun, damit mein Eingabestrom auch im Cygwin geleert wird?
Gehört fpurge überhaupt zum ANSI-Standard?
-
http://www-ccs.ucsd.edu/c/stdio.html
scheinbar nicht.guck mal in der ANSI C FAQ.
-
du kannst dafür ja eine eigene funktion schreiben. zB:
void skip_line (void) { while(getchar()!='\n'); }
so mach ich es jedenfalls immer
EDIT: fpurge() ist kein ansi-c.
-
geht auch einfacher
do{scanf("%s", &y);} while(getchar() != '\n')
-
@"linux"user:
und was ist y, wenn ich so provokant fragen darf?
-
Alles klar, damit kann ich was anfangen!
Danke sehr!
-
@ "c".rackwitz
char y[20];
ein cString
-
--linuxuser-- schrieb:
geht auch einfacher
do{scanf("%s", &y);} while(getchar() != '\n')Zweites Eigentor... *prust*
--linuxuser-- schrieb:
@ "c".rackwitz
char y[20];
ein cStringSorry...
-
wieso das geht doch so wie ich das geschrieben habe ich habs sogar ausprobiert!!
-
probiers doch selber aus
#include <stdio.h> int main(void){ char y[20]; do{scanf("%s", &y);} while(getchar() != '\n'); printf("%s\n", y); }/*end main*/
und du wirst sehen es funkt
do{scanf("%s", &y);} while(getchar() != '\n');
ist natuerlich auch bei chars interressant...
-
--linuxuser-- schrieb:
wieso das geht doch so wie ich das geschrieben habe ich habs sogar ausprobiert!!
Zeig mal...
Oder probier das hier mal aus:
char buf[256] = "Ein Haufen Firlefanz"; char * p = buf; scanf("%s", &p); printf("%s", buf);
-
stimmt das ist nicht gut waenn speicherbereich ueberschrieben wird aber was soll das mit meiner demonstration zu tun haben das newline zeichen zu ueberlesen?
-
--linuxuser-- schrieb:
stimmt das ist nicht gut waenn speicherbereich ueberschrieben wird aber was soll das mit meiner demonstration zu tun haben das newline zeichen zu ueberlesen?
Eigentlich nichts, aber ich wollte dich auf einen kleinen Fehler in deinem Code hinweisen, den andere nicht nachmachen sollen
-
do{scanf("%s", &y);} while(getchar() != '\n'); in dieser zeile ist KEIN FEHLER
wie man diese technik einsetzt ist jeden seine sache ob klug oder nicht!!!!
ich wollte nur demonstrieren dass man das problem mit dem newlinezeichen so loesen kann indem man das newlinezeichen erst gar nicht einliest
-
--linuxuser-- schrieb:
do{scanf("%s", &y);} while(getchar() != '\n'); in dieser zeile ist KEIN FEHLER
wie man diese technik einsetzt ist jeden seine sache ob klug oder nicht!!!!
ich wollte nur demonstrieren dass man das problem mit dem newlinezeichen so loesen kann indem man das newlinezeichen erst gar nicht einliestUnd AJ wollte nur darauf hinweisen dass &y um ein & zuviel ist.
Kurt
-
funzen tuts mit & aber auch!
-
Xserver schrieb:
funzen tuts mit & aber auch!
Ja bis man mal zufällig irgend eine Kleinigkeit umstellt und voila: Bufferoverflow, Programmcrash, Computerabsturz (ich weiß ich bin ein Dramatiker :D).
Mit dieser Einstellung "Es funzt ja trotzdem" können schwerwiegende Fehler und Sicherheitslücken in Programmen entstehen!
--linuxuser-- schrieb:
do{scanf("%s", &y);} while(getchar() != '\n'); in dieser zeile ist KEIN FEHLER
Richtig diese Zeile enthält keinen Syntaxfehler, aber im Zusammenhang mit deiner Definition von y ist es ein technischer Fehler!