fgets liest erstes zeichen nicht ein?



  • Davon bin ich auch ausgegangen allerdings funktioniert das nicht.
    Bevor ich gepostet hatte habe ich auch diese Lösung angewandt.

    Dann wird aber z.B. ein fgets überpsrungen, offensichtlich deshalb weil noch ein '\n' im Puffer ist!?

    mit do{...]while(*abfrage == '\n') geht es hingegen wunderbar. :|

    Aber gerade da wird doch eigentlich geprüft das im String an Stelle [0] ein '\n' vorhanden ist!? Wenn nicht sollte es ja abbrechen?

    Ich sollte vielleicht erwähnen das ich unter Linux entwickle.
    Deshalb kann ich auch nicht fflush verwenden. 😞

    Vielen Dank schonmal

    PS: Das mit den 3 Zeichen habe ich als Vorsichtsmaßnahme gewählt.
    Wenn ich fgets 3 gebe ist doch Platz für "y\n\0" oder? Ich habe durch einen Test festegestellt das fgets bei zu wenig Platz auch das '\n' weglässt, aber wie siehts mit dem '\0' aus?



  • ~hanshiro schrieb:

    Ich sollte vielleicht erwähnen das ich unter Linux entwickle.
    Deshalb kann ich auch nicht fflush verwenden. 😞

    gibt's 'fflush' nicht unter linux? 😮



  • no 😞



  • ~hanshiro schrieb:

    no 😞

    was fürn Blödsinn. fflush ist eine Funktion, die im ANSI C definiert ist, demnach ist sie unter alle POSIX Systemen zu finden.

    Was nicht geht ist mit fflush(stdin) den Standardinput Buffer zu leeren, weil das eine Windows Erweiterung ist.



  • Okay, vielen Dank!
    Kannst du mir sagen wie ich dann diesen Puffer löschen kann?

    mfg, hanshiro



  • Kann mir da keiner helfen?
    Habe das Problem immernoch. 😞



  • ~hanshiro schrieb:

    Okay, vielen Dank!
    Kannst du mir sagen wie ich dann diesen Puffer löschen kann?

    mfg, hanshiro

    siehe

    Zeh Mau schrieb:

    Warum für y oder n 3 Zeichen eingelesen werden sollen, weiss ich nicht.

    Jedenfalls schreib ein

    while(getchar() != '\n');

    hinter

    fgets(),

    das löst dein Problem.



  • Daraufhin schrieb ich

    Davon bin ich auch ausgegangen allerdings funktioniert das nicht.
    Bevor ich gepostet hatte habe ich auch diese Lösung angewandt.

    Dann wird aber z.B. ein fgets überpsrungen, offensichtlich deshalb weil noch ein '\n' im Puffer ist!?

    mit do{...}while(*abfrage == '\n') geht es hingegen wunderbar. :|

    Aber gerade da wird doch eigentlich geprüft das im String an Stelle [0] ein '\n' vorhanden ist!? Wenn nicht sollte es ja abbrechen?

    Ich sollte vielleicht erwähnen das ich unter Linux entwickle.



  • das würd ich mal an deiner stelle debuggen( also den inhalt der variablen nach jedem programmschritt mal gründlich angucken ) 😉
    oder poste doch den quellcode hier,
    eildieweil die hellseher recht rar sind und so



  • ei gucke mal was ich hier noch gefunden haaaaaab:

    void clearbuf()
    {
    	setvbuf(stdin,NULL,_IONBF,0);
        setvbuf(stdin,NULL,_IOFBF,BUFSIZ);
    }
    

    mfg
    kläff kläff


Anmelden zum Antworten