Eingabepuffer löschen

Hi folks,

ich suche nach einer Mglichkeit in Ansi-C den Eingabepuffer zu lschen und hatte da an sowas wie
while (getchar() != ‚\n‘);
gedacht.
Konkretes Problem: ich lasse per fgets einen string mit einer bestimmten Laenge einlesen und will danach noch einen zweiten einlesen lassen. Leider schneidet mein rechner nach der gewuenschten laenge den string ab und schiebt den rest incl. des \n gleich in den zweiten string. wie kann ich das verhindern?
Wenn es schon nicht Ansi geht, dann vielleicht wenigstens fuer die Linux/Unix-Seite?

cu micha

Hallo micha,

ich suche nach einer Mglichkeit in Ansi-C den Eingabepuffer zu
lschen und hatte da an sowas wie
while (getchar() != ‚\n‘);
gedacht.
Konkretes Problem: ich lasse per fgets einen string mit einer
bestimmten Laenge einlesen und will danach noch einen zweiten
einlesen lassen. Leider schneidet mein rechner nach der
gewuenschten laenge den string ab und schiebt den rest incl.
des \n gleich in den zweiten string. wie kann ich das
verhindern?

Dies ist das normale verhalten von fgets() !!!

char *fgets( char *string, int n, FILE *stream );

fgets liest eine string von stream und speichert ihn in string.
fgets liest zeichen ab der aktuellen position aus stream bis, inclusive dem ersten \n, oder dem Ende der Datei, oder bis n-1 Zeichen, welcher Fall auch zuerst zutrifft. Das Ergebnis wird in string abgelegt und am Ende ein Null-Chracter (\0) angehängt.
Das \n, sofern es gelesen wurde, ist im String enthalten.

Also wenn das \n in deinem Resultat enthalten ist, dann hast du alles eingelesen, sonst hast du halt nur einen Teil-String gelesen und must die Restlichen Zeichen noch aus dem Buffer abholen und wegwerfen.

#define LEN 100
int temp;
FILE \*stream;
char line[LEN];

.... Hier Datei öffnen etc.

 if( fgets( line, LEN, stream ) == NULL)
 printf( "fgets error\n" );
 else
 {
 // [strlen(line)-1] ist hier sicher, da fgets() 
 // mindestens ein Zeichen zurückliefert hat.
 // (sonst währe fgets() == NULL eingetreten.)
 if ( line[strlen(line)-1] != '\n" )
 {
 while ( (temp = fgetc(stream)) != '\n')
 {
 if ( temp 



> Wenn es schon nicht Ansi geht, dann vielleicht wenigstens fuer  
> die Linux/Unix-Seite?

MfG Peter(TOO)

huhu…

also ich weiss nciht genau wie und ob das in Ansi-C geht, aber versuch es mal mit:

fflush(stdin);
getchar();

damit wird normalerweise der eingabebuffer gelöscht… kannst es ja mal testen und sagen ob es gefunzt hat

winke winke

tommy

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]