Problem bei fgets() - Funktion wird einfach übersprungen



  • Wenn ich die Funktion new_entry() aufrufe, dann überspringt er die fgets()-funktion und beendet danach das Programme.
    Ich hab mir schon Gedanken gemacht, dass evtl. noch der Eingabepuffer beschrieben ist vom scanf() aber ne Lösung hab ich leider noch nicht gefunden.

    Nun denn hier der Quelltext:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX 20
    
    int new_entry() {
        char password[MAX];
        printf("\nPasswort : ");
        fgets(password, MAX, stdin);
    }
    
    int read_entry() {}
    int main(void)
    {
        int eingabe=0;
    
        printf( "\t\tTelefon-Karten\n"
                "\t-1- Neuer Eintrag\n"
                "\t-2- Eintrag auslesen\n"
                "\t-3- Programm Beenden\n");
        printf("Auswahl : ");
        scanf("%d", &eingabe);
    
        switch(eingabe) {
            case 1  :   new_entry();
                        break;
            case 2  :   read_entry();
                        break;
            case 3  :   printf("byebye\n");
                        return EXIT_SUCCESS;
                        break;
            default :   fprintf(stderr, "falsche Eingabe\n");
                        return EXIT_FAILURE;
                        break;
        }
        return EXIT_SUCCESS;
    }
    

    woran liegt es, bzw. was für einen dummen Fehler mache ich?^^

    Gruß tridane



  • mist -.- falsches Forum...bitte mal verschieben 🤡



  • Dieser Thread wurde von Moderator/in Unix-Tom aus dem Forum Datenbanken in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • das problem ist, dass das newline-zeichen nach scanf() immer noch im inputpuffer ist. füge ein

    getchar();
    

    nach scanf() ein um dieses vom inputpuffer zu holen. allerdings ist das mehr oder weniger unschön. alternativ kannst du grundsätzlich fgets() und im anschluss sscanf() benutzen, um die eigentliche formatierung am ergebnispuffer vorzunehmen. 🙂



  • Genau aus diesem Grund sollte man eigentlich nicht scanf() oder fscanf()
    verwenden. Es gibt immer irgendwelchen Trouble mit unvollständig gelesenen
    Puffern.

    Ich mache das prinzipiell so:

    fgets( stdin, buf, buf_länge);
    sscanf( buf, ...);
    

    Dann sollte Dein Compiler noch irgendwas wie "unreachable code" anmaulen:

    case 3  :   printf("byebye\n");
                        return EXIT_SUCCESS;
                        break;
            default :   fprintf(stderr, "falsche Eingabe\n");
                        return EXIT_FAILURE;
                        break;
    

    In beiden Fällen kommt es nie bis zu dem break;


Anmelden zum Antworten