2016-07-03 10 views
3

Hey Leute, also jedes Mal, wenn ich mein Programm ausführe, das den Durchschnitt in einem Zehn-Elemente-Array findet. Ich bekomme etwas andere Ergebnisse. Irgendeine Idee warum?Array gibt verschiedene Ausgänge in C?

Hier ist mein Code:

#include "stdio.h" 

int main() 
{ 
float array[10]; 

for (int n=0; n<10;n++) 
{ 
    array[n] = n * 4.76; 
    printf("array[%i] = %.4f\n",n,array[n]); 
} 

float total; 
for (int n=0; n<10; n++) 
{ 
    total = total + array[n]; 
} 

printf("Average: %.4f\n", total/10); 
return 0; 
} 

und einige Beispielergebnisse sind:

array[0] = 0.0000 
array[1] = 4.7600 
array[2] = 9.5200 
array[3] = 14.2800 
array[4] = 19.0400 
array[5] = 23.8000 
array[6] = 28.5600 
array[7] = 33.3200 
array[8] = 38.0800 
array[9] = 42.8400 
Average: 21.2598 

array[0] = 0.0000 
array[1] = 4.7600 
array[2] = 9.5200 
array[3] = 14.2800 
array[4] = 19.0400 
array[5] = 23.8000 
array[6] = 28.5600 
array[7] = 33.3200 
array[8] = 38.0800 
array[9] = 42.8400 
Average: 21.2826 
+7

Hinweis: Welchen Wert enthält 'total' kurz vor der zweiten for-Schleife? – immibis

+0

int gesamt = 0; Sie sind ein Genie. Vielen Dank. Hat es eine Zufallszahl erzeugt, da es keinen Anfangswert hatte? – Gregborrelly

+1

Wenn Sie es zu einem Int machen, kann es nur ganze Zahlen enthalten. – immibis

Antwort

7

Wenn Variablen in C erklärt, sicherstellen, dass sie auf einen Standardwert initialisiert sind. Variablen, die auf dem Stack zugewiesen sind, werden normalerweise nicht auf ihre Standardwerte initialisiert, sondern sie werden mit Junk initialisiert.

Also, bevor Summierung starten, initialisieren Ihre Variable als

float total = 0.0f; 

und Sie sollten die gleiche Antwort jedes Mal bekommen.

+0

Wissen Sie, warum das so ist? Woher kommen diese Zufallszahlen? – Gregborrelly

+0

Bevor Ihr Programm den Stapel verwendet hat, gibt es eine große Möglichkeit, ein anderes Programm war. Und dieses Programm hat vielleicht genau diesen Speicherort benutzt und nachdem es fertig war, hat es sich nicht selbst aufgeräumt (das muss es nicht). Und jetzt, als Ihr Programm diesen Speicherort für seine eigenen Zwecke verwendet hat, hat C nicht darauf geachtet, den Wert standardmäßig auf 0 zu setzen (es ist ein unnötiger Overhead). –

+0

@BackSlash Es ist nur was im Speicher für die Variable übrig blieb ... könnte alles sein, abhängig davon, wofür es zuletzt verwendet wurde (möglicherweise nicht einmal von Ihrem Programm, aber manchmal von einem anderen Teil Ihres Programms, das nicht ist Verwenden Sie es wie einen Funktionsaufruf, der bereits zurückgegeben wurde). – Dmitri

Verwandte Themen