Falsche Ausgabe... wieso??



  • Hejho!!

    Neues Programm, neue Frage...

    und zwar soll dieses Programm einfach nur Noten einlesen und sie wieder ausgeben... aber irgendwie passiert das nicht, obwohl ich da gar kein Fehler entdecken kann... 😞

    Wenn ich zum Beispiel 5 Noten eingeben möchte, wird Note 6 ausgegeben ...

    woran liegt das?? Ist da wirklich noch was falsch am programm????

    #include <stdio.h>
    #include <malloc.h>
    
    void main()
    {
    	int anzahl, x;
    	int *tabelle;
    
    	printf("Wieviele Noten möchten Sie eingeben?  ");
    	scanf("%i", &anzahl);
    
    	tabelle = (int *) malloc (anzahl * sizeof(int));
    
    	printf("\n\n");
    
    	for(x = 0; x < anzahl; x++);
    	{
    		printf("%i. Note:  ", x+1);
    		scanf("%i", tabelle + x);
    	}
    
    	printf("\nNotentabelle\n\n");
    
    	for(x = 0; x < anzahl; x++);
    	{
    		printf("Note %i: %i\n", x+1, *tabelle + x);
    	}
    
    	getchar();
    	getchar();
    }
    


  • Machs mal so:

    scanf("%i", &tabelle[x]);
    

    Du musst scanf (und verwanten Funktione) den Pointer auf die Variable geben, ansonsten kann scanf den Inhalt ja nicht veraendern.



  • [MUELL]



  • @MBCS-CITP:
    Naja, tabelle + x ist ja auch ein Pointer. Schön ist's aber imho trotzdem nicht.

    Die eigentlichen Fehler:

    - Semikolon hinter der for-Schleife
    - *tabelle + x ist Müll. Damit nimmst du immer das erste Element des Arrays und addierst darauf die Zählvariable x. Ich denke nicht dass du das willst 😉

    PS: Bitte in Zukunft die C/C++ Tags verwenden.



  • Dabnke habs jetzt soweit hinbekommen... nur zeigt der komisch Werte bei durchschnitt und maxiumum an 😞 wieso??

    #include <stdio.h>
    #include <malloc.h>
    
    void main()
    {
    	int anzahl, x, min, max;
       float durchschnitt = 0.0;
    	int *tabelle;
    
    	printf("Anzahl der Noten: ");
    	scanf("%i", &anzahl);
    
    	tabelle = (int *) malloc (anzahl * sizeof(int));
    
    	printf("\n\n");
    
    	//Eingabe der Noten
    
    	for (x = 1; x <= anzahl; x++)
    	{
    		printf("%i. Note: ", x);
    		scanf("%i", tabelle + x);
    	}
    
       min = *(tabelle);
       max = *(tabelle);
    
       for (x = 1; x <= anzahl; x++)
       {
          if(*(tabelle + x) < min)
          	{
             	min = *(tabelle + x);
             }
          if(*(tabelle + x) > max)
          	{
             	max = *(tabelle + x);
             }
    
          durchschnitt += (float)*(tabelle);
       }
    
       durchschnitt = durchschnitt / anzahl;
    
       //Ausgabe der Noten
    
       printf("\nNotentabelle\n\n");
    
       for (x = 1; x <= anzahl; x++)
    	{
    		printf("Note %i: %i\n", x, *(tabelle + x));
    	}
    
       printf("\n\nMinimum: %i", min);
       printf("\nMaximum: %i", max);
    
       printf("\n\nDurchschnitt: %.2f", durchschnitt);
    
       free(tabelle);
    
    	getchar();
    	getchar();
    }
    


  • Warum wird x in den for-Schleifen auf einmal mit 1 initialisiert? Das war vorhin doch schon korrekt? Fix das wieder und min und max sollten stimmen.

    durchschnitt += (float)*(tabelle);
    

    ist Quatsch. Da wird bei jedem Schleifendurchlauf das 1. Element aufsummiert. Und mach deine Arrayzugriffe mal doch besser mit

    array[foo];
    

    und nicht immer

    array + foo
    

    Es ist einfach schöner (und erzähl mir jetzt nicht, dass das dein Lehrer so beibringt ;))



  • also wenn ich

    durchschnitt += (float)*(tabelle + x);
    

    mache, denn geht der durchschnitt aber bei max zeigt er mir immernoch ne komische zahl :((

    hehe lol ich werd mich bessern mit dem schreiben 😉



  • Du hast die for-Schleifen korrigiert? So wie in meinem ersten Satz erwähnt?



  • es ist mit 1 richtig, weil das erste element angesprochen wird und dann gehts so weiter...



  • Arrays in C werden aber mit 0 beginnend angesprochen 🙄

    array[0]; // 1. Element
    array[1]; // 2. Element
    array[2]; // 3. Element
    ...
    


  • danke 😃

    jetzt läuft das programm !!!!

    war mit der 0 nen gedankenfhler 🙂 thx!!!


Anmelden zum Antworten