Newbee Frage: Unerklärlicher Programmablauf
-
Hi,
ich habe ein Phänomen was ich mir selbst nicht erklären kann.
In meiner Funktion artikel_printKategorienLagerWerte macht es einen Unterschied, ob ich die enum Variable katTyp auskommentiere oder nicht.
//enum kategorieEnum katTyp;
Ausgabe (auskommentiert und leider falsch):
Summe Kategorie Nr. 0: 200.00
Summe Kategorie Nr. 1: 2298.76
Summe Kategorie Nr. 2: 400.00Richtig wäre eine Summe von Kategorie Nr. 2 von 2300,00. Scheint also ein Rundungsfehler oder sowas zu sein, aber woher kommt der? Kommentiere ich nun die enum-Variable ein, dann erhalte ich auch das erwartete Ergebnis. Ich benutze die Variable katTyp aber nirgendwo und brauche sie auch nicht.
void artikel_printKategorienLagerWerte (FILE * f, artikelTyp arts[], const unsigned int num) { unsigned int i; //enum kategorieEnum katTyp; float summe [num]; for(i = 0; i < num; i++) { switch(arts[i].kategorie) { case SCHREIBWAREN: summe[0] += arts[i].anz * arts[i].preis; break; case DROGERIE: summe[1] += arts[i].anz * arts[i].preis; break; case SONSTIGE: summe[2] += arts[i].anz * arts[i].preis; break; } } for(i = 0; i < num-1; i++) { fprintf(stdout, "\nSumme Kategorie Nr. %d: %.2f", i, summe[i]); } }
Meine Main:
int main(int argc, char** argv) { artikelTyp a[] = { {1, SCHREIBWAREN, 2, 100., "Cascardi Fueller"}, {2, DROGERIE, 200, 10., "LaBelle Seife"}, {3, DROGERIE, 100, 3., "R-Tips"}, {4, SONSTIGE, 400, 1., "Cq Banane"} }; artikel_printKategorienLagerWerte (stdout, a, sizeof a / sizeof a[0]); return 0; }
Kann mir jemand erklären wo das Problem liegt?
-
also bei "float summe[num];" ist num nicht die länge des arrays sondern die anzahl an unterschiedlichen kategorien.
-
Du hast dein summen-Array nicht initialisiert!
void artikel_printKategorienLagerWerte (FILE * f, artikelTyp arts[], const unsigned int num)
besser
void artikel_printKategorienLagerWerte (FILE *f,const artikelTyp *arts,unsigned int num)
float summe [num];
Das geht so in ANSI C nicht, besser
float *summe=malloc(num*sizeof(float));
dabei free nicht vergessen.