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.