bricht bei Struktur ab
-
huhu
ich hab das problem, dass wenn ich dies Funktion aufrufe das Programm abstürzt
hatte es zuerst bei den array mit fgets, da trat aber das gleiche Problem auf!!woran könnte es liegen??
void Tankbeleg() { struct Daten{ char Abteilung; char Mitarbeiter[30]; char Datum[8]; float Menge; float Preis; }Beleg; printf("\n\nBitte geben sie alle erforderlichen Daten ein\n\n"); printf("Abteiling : "); scanf("%c",Beleg.Abteilung); printf("\nMitarbeiter : "); scanf("%s",Beleg.Mitarbeiter); printf("\nDatum : "); scanf("%s",Beleg.Datum); printf("\nMenge in l : "); scanf("%f",Beleg.Menge); printf("\nPreis in Euro : "); scanf("%f",Beleg.Preis); }
-
scanf will pointer.
scanf("%c",&Beleg.Abteilung);
das gilt fuer alles, was kein %s ist.
das damit uebergibst du die adresse von beleg.abteilung. es ist mit &(beleg.abteilung) aequivalent.hier noch was zu schmoekern:
http://www-ccs.ucsd.edu/c/lib_scan.html#Scan Functionsinsofern du wirklich ansi c programmierst, gehoert ein void in deinen funktionskopf:
void Tankbeleg(void) {...
statt printf fuer eine zeile kannst du auch puts() benutzen, wenn du keinen formatierten output brauchst (also keine %???).
-
thx für die Antwort jetzt hab ich noch ein ganz kleines Problem
und zwar wenn ich
printf("Abteiling : "); scanf("%c",Beleg.Abteilung);
eingegeben habe komt die nächste eingebae
printf("\nMitarbeiter : ");
der cursor ist aber eine Zeile darunter!und das stört!
wie kann ich das umgehen?und hat vllt jemand ne erklärung für fflush(stdin);??
Also was sich genau dahinter verbirgt? ich hab nähmlich flushall();
gelernt aber glaube, dass dies Funktion müll ist oder nur im Borland compiler bestehen!?!
-
HoPPeL schrieb:
der cursor ist aber eine Zeile darunter!und das stört!
wie kann ich das umgehen?probier mal das und ueberlege, wieso "\r\n" "carriage return, line feed" heisst:
printf("foobar\rbaz");
die sache begegnet dir in der zukunft oefter, vorallem bei textorientierten socketsachen wie telnet, irc oder http.
und hat vllt jemand ne erklärung für fflush(stdin);??
ansi-c-faq hat da nen thread drueber.
ansonsten geht typischerweisewhile (getchar() != '\n');
flushall();
ist kein ansi c und gehoert sicher nur zum borland compiler.
-
thx für die Antwort aber mit
printf("foobar\rbaz");
ich ich jetzt nicht direkt was anfagen
und diese Zeilenumbrüchen scheinen von puts zu kommen mit printf passeirt dies nicht...
mfg
-
richtig, puts() macht selber einen umbruch nach der ausgabe.
printf("foobar\rbaz");
damit wollte ich dir zeigen, dass \n in manchen faellen nicht reicht, sondern es korrekter weise \r\n sein muss.
\n geht nur in die naechste zeile, \r geht an den anfang der zeile.
-
okay danke nochmal für die hilfe
mfg