Ausgabe von Feldern funktioniert nicht



  • Hallo,
    ich bin noch Anfänger was C betrifft und probier mich gerade an einem Programm was Artikel, Anzahl, Einzelpreis und mwstKategorie einliest und dann den Kassenzettel ausgibt. Mein Problem ist dass er nur den zuletzt eingegebenen Artikel ausgibt aber nicht die anderen.

    //---------------------------------------------------------------------------
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    //---------------------------------------------------------------------------
    typedef struct daten{
                     char artikel[15];
                     int anzahl;
    		 float epreis, gpreis;
    		 char mwstKat;    }ds;
    
    int main(void)
    {
    //Variablendefinition
    ds afeld[100];
    int i;
    int artikelanzahl;
    float summenpreis, summeA, summeB, betragA, betragB;
    char wh;
    
    i = 0;
    
    do{                                     //Eingabeschleife der Artikel
            clrscr();
            fflush(stdin);
    	gotoxy(5,8);textcolor(RED);
    	cprintf("Artikel: ");
    	scanf("%s",&afeld[i].artikel);
            fflush(stdin);
    	gotoxy(5,10);textcolor(RED);
    	cprintf("Anzahl: ");
    	scanf("%i",&afeld[i].anzahl);
            fflush(stdin);
    	gotoxy(5,12);textcolor(RED);
    	cprintf("Einzelpreis: ");
    	scanf("%f",&afeld[i].epreis);
            fflush(stdin);
    	gotoxy(5,14);textcolor(RED);
    	cprintf("MWSt Kat.: ");
    	scanf("%c",&afeld[i].mwstKat);
            fflush(stdin);
            gotoxy(5,16);
            cprintf("Nächsten Artikel?(y/n)-> ");
            wh = getch();
    	i = i+1;
    
    }
    while(wh=='y' || i==100); //Nur 100 Artikel speicherbar
    
    artikelanzahl = i; //Merken der Anzahl der eingegebenen Artikel
    summenpreis = 0;
    summeA = 0;
    summeB = 0;
    
    for(i = 0; i < artikelanzahl; i = i+1)
    {
    
     afeld[i].gpreis = afeld[i].anzahl * afeld[i].epreis; //Artikelgesamtpreis
     summenpreis = afeld[i].gpreis + summenpreis;
    
      if(afeld[i].mwstKat == 65)
       {
        summeA = afeld[i].gpreis + summeA;
       }
         else if(afeld[i].mwstKat == 66)
          {
           summeB = afeld[i].gpreis + summeB;
          }
    
    }
    
    betragA = summeA * 19 / 119;   //MWStBetrag für 19%
    betragB = summeB *  7 / 107;   //MWStBetrag für  7%
    
    //Ausgabe des Kassenbon
    //BS.. Bildschirm
    clrscr();
    gotoxy(5,2);textcolor(RED);
    cprintf("Kassenbon");
    
    for(i=0;i < artikelanzahl; i=i+1)
    {
    gotoxy(5,4);
    printf("%s \\ %i \\ %.2f \\ %c \\ %.2f", afeld[i].artikel, afeld[i].anzahl, afeld[i].epreis, afeld[i].mwstKat, afeld[i].gpreis); //Ausgabe
    }
    
    gotoxy(5,6);textcolor(RED);
    cprintf("_____________________________");
    gotoxy(5,8);textcolor(RED);
    cprintf("Summe   [%d]      %.2f", artikelanzahl, summenpreis);
    gotoxy(5,10);textcolor(RED);
    cprintf("              MWSt          Brutto           Netto");
    gotoxy(5,12);textcolor(RED);
    cprintf("A 19          %.2f          %.2f             %.2f", betragA, summeA, summeA-betragA);
    gotoxy(5,14);textcolor(RED);
    cprintf("B  7          %.2f          %.2f             %.2f", betragB, summeB, summeB-betragB);
    gotoxy(5,16);textcolor(RED);
    cprintf("Vielen Dank fuer ihren Einkauf!");
    
    getch();
    
    };
    

    Ich finde einfach nicht den Fehler, weil der Compiler auch keinen Fehler meldet.
    Egal wieviele Artikel ich am Anfang eingebe er gibt immer nur den letzten aus, aber Summe der Artikel und gesamtpreis, MWst ist richtig.

    Bild: 4 Artikel eingegeben letzter Schinken
    http://imageshack.us/photo/my-images/600/cforum.jpg/



  • Ich würde mal dein Programm auf ein funktionsfähiges Minimum reduzieren und dann nochmals testen/debuggen.



  • Übrigens: Mach da mal den Adressoperator raus:

    scanf("%s",&afeld[i].artikel);
    

    Und schalte mal bei deinem Compiler alle Warnungen ein.



  • Ich hab den Quelltext jetzt nur auf die Eingabe der Artikel und die Ausgabe
    reduziert.

    //---------------------------------------------------------------------------
    #include <stdio.h>
    #include <conio.h>
    #include <string.h>
    //---------------------------------------------------------------------------
    typedef struct daten{
                     char artikel[15];
                        }ds;
    
    int main(void)
    {
    //Variablendefinition
    ds afeld[100];
    int i;
    int artikelanzahl;
    char wh;
    i = 0;
    
    do{
            clrscr();
            fflush(stdin);
    	gotoxy(5,8);
    	printf("Artikel: ");
    	scanf("%s", afeld[i].artikel);
            gotoxy(5,16);
            printf("Nächsten Artikel?(y/n)-> ");
            wh = getch();
    	i = i+1;
    
    }
    while(wh=='y' || i==100); //Nur 100 Artikel speicherbar
    
    //Ausgabe des Kassenbon
    //BS.. Bildschirm
    clrscr();
    gotoxy(5,2);
    printf("Kassenbon");
    
    for(i=0;i < artikelanzahl; i=i+1)
    {
    gotoxy(5,4);
    printf("%s", afeld[i].artikel); //Ausgabe
    }
    
    getch();
    
    };
    

    Als Ausgabe kommt jetzt nur Müll raus, nichts was ich als Artikel eingegeben hab:
    http://imageshack.us/photo/my-images/692/test2wz.jpg/


  • Mod

    Wieder ein Problem, das sofort gelöst wäre, wenn man nur mal Warnoptionen anschalten würde. Kommen eigentlich keine anderen Fragen mehr?



  • Ich habe mal das Programm überarbeitet und überflüssige Funktionen rausgeworfen.
    Die Ausgabe sieht zwar nicht schön aus, aber bei mir funktionierts!

    #include <stdio.h>
    #include <string.h>
    
    typedef struct daten{
                     char artikel[15];
                     int anzahl;
             float epreis, gpreis;
             char mwstKat;    }ds;
    
    int main(void)
    {
    /* Variablendefinition */
    ds afeld[100];
    int i;
    int artikelanzahl;
    float summenpreis, summeA, summeB, betragA, betragB;
    char wh;
    
    i = 0;
    
    do{                                     /* Eingabeschleife der Artikel */
    
            fflush(stdin);
    
        printf("Artikel: ");
        scanf("%s",afeld[i].artikel);
            while(getchar() == EOF);
    
        printf("Anzahl: ");
        scanf("%i",&afeld[i].anzahl);
        while(getchar() == EOF);
    
        printf("Einzelpreis: ");
        scanf("%f",&afeld[i].epreis);
        while(getchar() == EOF);
    
        printf("MWSt Kat.: ");
        scanf("%c",&afeld[i].mwstKat);
        while(getchar() == EOF);
    
            printf("Nächsten Artikel?(y/n)-> ");
            wh = getchar();
        while(getchar() == EOF);
        i = i+1;
    
    } while(wh=='y' || i==100); /* Nur 100 Artikel speicherbar */
    
    artikelanzahl = i; /* Merken der Anzahl der eingegebenen Artikel */
    summenpreis = 0;
    summeA = 0;
    summeB = 0;
    
    for(i = 0; i < artikelanzahl; i = i+1)
    {
    
     afeld[i].gpreis = afeld[i].anzahl * afeld[i].epreis; /* Artikelgesamtpreis */
     summenpreis = afeld[i].gpreis + summenpreis;
    
      if(afeld[i].mwstKat == 65)
       {
        summeA = afeld[i].gpreis + summeA;
       }
         else if(afeld[i].mwstKat == 66)
          {
           summeB = afeld[i].gpreis + summeB;
          }
    
    }
    
    betragA = summeA * 19 / 119;   /* MWStBetrag für 19% */
    betragB = summeB *  7 / 107;   /* MWStBetrag für  7% */
    
    /* Ausgabe des Kassenbon */
    /* BS.. Bildschirm */
    
    printf("Kassenbon\n");
    
    for(i=0;i < artikelanzahl; i=i+1)
    {
    
    printf("%s \\ %i \\ %.2f \\ %c \\ %.2f\n", afeld[i].artikel, afeld[i].anzahl, afeld[i].epreis, afeld[i].mwstKat, afeld[i].gpreis); /* Ausgabe */
    }
    
    printf("_____________________________");
    
    printf("Summe   [%d]      %.2f", artikelanzahl, summenpreis);
    
    printf("              MWSt          Brutto           Netto");
    
    printf("A 19          %.2f          %.2f             %.2f", betragA, summeA, summeA-betragA);
    
    printf("B  7          %.2f          %.2f             %.2f", betragB, summeB, summeB-betragB);
    
    printf("Vielen Dank fuer ihren Einkauf!");
    
    getchar();
    return 0;
    }
    


  • Vielen Dank für eure Hilfe erstmal 🙂
    Nachdem ich gotoxy() conio.h und farben entfernt habe funktioniert es.
    Ich versteh allerdings nicht wirklich warum, aber trotzdem danke!



  • Eric20 schrieb:

    Vielen Dank für eure Hilfe erstmal 🙂
    Nachdem ich gotoxy() conio.h und farben entfernt habe funktioniert es.
    Ich versteh allerdings nicht wirklich warum, aber trotzdem danke!

    Wenn du auf OS-spezifische Funktionen verzichten kannst, dann tu das.
    Das mit der Farbausgabe kann ich verstehen, aber der Rest (getch(), cprintf() etc.)?



  • Eric20 schrieb:

    Vielen Dank für eure Hilfe erstmal 🙂
    Nachdem ich gotoxy() conio.h und farben entfernt habe funktioniert es.
    Ich versteh allerdings nicht wirklich warum, aber trotzdem danke!

    Wenn du alle Ausgaben in die selbe Zeile (wg gotoxy(5,4);) schreibst, bekommst du nur das letzte zu sehen.


Anmelden zum Antworten