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.00

    Richtig 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.


Anmelden zum Antworten