Scanf, Eingabewerte speichern

Hallo, bin dabei ein Programm zu schreiben, bei dem der Benutzer solange Zahlen eingeben kann, bis er 0 eingibt.

Sobald das der Fall ist, soll das Programm die Summe, den Durchschnitt und die Anzahl der Eingaben ausgeben.

Mein Programm sieht bis jetzt so aus:

#include <stdio.h>
#include <stdlib.h>

int main()

{

//int anzahl;
float summe;
//float durchschnitt;
float eingabe;

while(eingabe !=0 )
{

printf("Bitte Zahl eingeben:\t");
scanf("%f", &eingabe);
summe = eingabe;
}
if(eingabe == 0)
{
printf("Summe: %.2f\n", summe);
}

return EXIT_SUCCESS;

}

Die Anzahl und den Durchschnitt hab ich noch auskommentiert, da ich zuerst das mit der Summe hinkriegen möchte.
Weiß nur nicht wirklich, wie ich alles eingegebenen Werte in einer Variable speichern und zusammenzählen kann...

Zurzeit gibt das Programm, egal wie viele Zahlen ich eingebe, immer 0,00 als Summe aus.

Hat jemand einen Tipp?
 

cwriter

Erfahrenes Mitglied
Die Anzahl und den Durchschnitt hab ich noch auskommentiert, da ich zuerst das mit der Summe hinkriegen möchte.
Weiß nur nicht wirklich, wie ich alles eingegebenen Werte in einer Variable speichern und zusammenzählen kann...

Zurzeit gibt das Programm, egal wie viele Zahlen ich eingebe, immer 0,00 als Summe aus.
Naja, die Summe ist ja nur eine Addition.
Also
C:
anzahl = N;
summe = Eingabe1 + Eingabe2 + ... + EingabeN;
Also ist zum Zeitpunkt 0 (noch keine Eingabe) die Summe 0, zum Zeitpunkt 1 sollte sie Eingabe1 sein, dann Eingabe1 + Eingabe2, etc.
Und wenn man sich das so ansieht, kann man auch die Summe in Teilstücke zerlegen (Präfixsumme):
C:
summe0 = 0;
summe1 = summe0 + Eingabe1;
summe2 = summe1 + Eingabe2;
// DIch interessiert ja nur summeN, also kannst du summeM (M < N) jeweils überschreiben. Somit haben wir:
summeN = summe(N-1) + EingabeN;
// summeN ist dieselbe Variable wie summe(N-1)
summe = summe + EingabeN;
// Oder, in C Kurzschreibweise:
summe += EingabeN;

Du bekommst deshalb immer 0.0, weil du nicht addierst, sondern gleichsetzt. Die Letzte Eingabe ist ja per Definition immer 0...

Gruss
cwriter
 
Naja, die Summe ist ja nur eine Addition.
Also
C:
anzahl = N;
summe = Eingabe1 + Eingabe2 + ... + EingabeN;
Also ist zum Zeitpunkt 0 (noch keine Eingabe) die Summe 0, zum Zeitpunkt 1 sollte sie Eingabe1 sein, dann Eingabe1 + Eingabe2, etc.
Und wenn man sich das so ansieht, kann man auch die Summe in Teilstücke zerlegen (Präfixsumme):
C:
summe0 = 0;
summe1 = summe0 + Eingabe1;
summe2 = summe1 + Eingabe2;
// DIch interessiert ja nur summeN, also kannst du summeM (M < N) jeweils überschreiben. Somit haben wir:
summeN = summe(N-1) + EingabeN;
// summeN ist dieselbe Variable wie summe(N-1)
summe = summe + EingabeN;
// Oder, in C Kurzschreibweise:
summe += EingabeN;

Du bekommst deshalb immer 0.0, weil du nicht addierst, sondern gleichsetzt. Die Letzte Eingabe ist ja per Definition immer 0...

Gruss
cwriter
Hallo,

hab das Programm jetzt fertig:

#include <stdio.h>
#include <stdlib.h>

int main()

{

int anzahl = 0;
float summe;
float durchschnitt;
float eingabe;

printf("Zahl eingeben: \t");
scanf("%f", &eingabe);

while(eingabe !=0 )
{

anzahl++;
summe = summe + eingabe;
printf("Zahl eingeben: \t");
scanf("%f", &eingabe);
}

durchschnitt = summe/anzahl;
printf("Anzahl: %d, Summe: %.2f, Durchschnitt: %.2f", anzahl, summe, durchschnitt);

return EXIT_SUCCESS;

}

Grundsätzlich funktioniert es, aber manchmal werden für die Summe und den Durchschnitt ganz komische Zahlen ausgegeben. Z.B. wenn ich 5, 5 und dann 0 eingebe, wird manchmal als Summe -2.1343485 und als Durchschnitt 3.584739 ausgegeben. Also ganz willkürliche Zahlen. Die Anzahl wird immer richtig ausgegeben.
Dann funktioniert es 2 Durchgänge mal wieder normal und dann gibt es wieder so komische Zahlen aus...
Weißt du, woran das liegen könnte?
 

cwriter

Erfahrenes Mitglied
Dann funktioniert es 2 Durchgänge mal wieder normal und dann gibt es wieder so komische Zahlen aus...
Weißt du, woran das liegen könnte?
Du greifst auf summe zu, obwohl das undefiniert ist. Du sagst mit "float summe;" nur, dass es einen Speicherbereich in der Grösse eines Floats mit diesem Namen gibt - nicht, was zu Beginn drinstehen soll. Daher sollte man die Variablen immer sinnvoll initialisieren (oder definieren):
C:
float summe; // Schlecht
float summe = 0; // Gut

Gruss
cwriter
 
Du greifst auf summe zu, obwohl das undefiniert ist. Du sagst mit "float summe;" nur, dass es einen Speicherbereich in der Grösse eines Floats mit diesem Namen gibt - nicht, was zu Beginn drinstehen soll. Daher sollte man die Variablen immer sinnvoll initialisieren (oder definieren):
C:
float summe; // Schlecht
float summe = 0; // Gut

Gruss
cwriter

Macht Sinn, danke dir :)