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 willstPS: 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!!!