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 Functions

    insofern 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 typischerweise

    while (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


Anmelden zum Antworten