Linux fährt über scanf und fgets einfach drüber



  • Hi folgendes 2 probleme hab ich und zwar da:

    int addhuman(int nr, struct humanSammlung neu[])
    {
    		printf("ID des Menschen ");
    		//scanf("%d",&neu[nr].mensch.ID);
    		printf("Name? ");
    		fflush(stdin);
    		fgets(neu[nr].mensch.name,MAX,stdin);
    	}
    

    scanf hab ich auskommentiert da er mir dann schreibt:

    Warning: Format int >>%d<< erwartet Typ "int *", aber Argument 2 hat Typ int.

    Was soll das genau heißen? ID ist auf jedenfall int im struct gespeichert.

    und nächste frage: warum fährt er über fgets einfach drüber ohne dass ich was eingeben kann?

    wie gesagt wenn ich scanf auskommentiere kompiliert es ohne fehler



  • Vielleicht hilt es, Klammern zu setzen

    scanf("%d",&(neu[nr].mensch.ID));
    

    Zum bösen fflush gibts hier mehr Infos
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39349.html



  • Die Klammern sollten aber nicht notwendig sein. Seltsam, seltsam.

    Wie sieht denn die Struktur aus? Sind irgendwo Makros am Werk?



  • scanf() und fflush( stdin) sind Anfängerfehler.
    Man macht das halt nicht so.

    Lies einen String aus der console und hole dann mit scanf() den Wert:

    char  buffer[256], wert[256];
    
    fgets( buffer, 255, stdin);
    sscanf( buf, "%s", wert);
    


  • Scheppertreiber schrieb:

    char  buffer[256], wert[256];
    fgets( buffer, 255, stdin);
    sscanf( buf, "%s", wert);
    

    ^^die umständlichste art, das '\n' abzuschneiden, die ich bisher gesehen habe.
    🙂



  • Na Fricky, das ging aber daneben :-)))))))))))



  • Scheppertreiber schrieb:

    Na Fricky, das ging aber daneben :-)))))))))))

    dann erklär doch mal...
    🙂



  • Du weist doch nie, was der Vollpfosten an User da so alles eintippt. Es gibt einen
    Eingabestring bzw ein argv[]. Zerlegen und testen muß man den Mist ja auch. Irgendwie
    ist es da sinnvoller, den kompletten String (aka getcmd bzw argv) komplett zu
    lesen und sich dann die Sachen rauszuziehen. Die Humpelei mit einem flush auf eine
    Eingabe (!) ist dann eh obsolet.

    Keine Ahnung wer auf diese Idee gekommen ist, sie geistert aber durch's Forum.


Log in to reply