Johannes wrote:
> so sieht mein Array beispielhaft aus. Ist in wirklichkeit wesentlich
> größer. Kapier nicht warum er das nicht erfassen kann.
DIe Antwort darauf ist ganz einfach:
Der Rechner macht, was du programmiert hast.
Wenn also das Ergebnis nicht dem entspricht, was du haben
möchtest, dann deshalb weil du einen Fehler im Programm hast.
Den wird dir aber niemand zeigen können, solange du nicht
etwas mehr von deinem Programm herzeigst..
> die Funktion steht in einem größeren Funktionsblock.
Das hört sich nicht besonders gut an. Das klingt eher wieder
nach einem Standardproblem: Zu grosse Funktionen, die keiner
mehr überblicken kann.
Und ... hat recht. Der Originalcode sieht wirklich so aus,
als ob du das Arrayhandling in C nicht wirklich verstanden
hast.
Bei der Deklaration eines Arrays gibt man die Anzahl der
Elemente im Array an
int a[6];
a hat 6 Elemente. Diese tragen die Indizes 0, 1, 2, 3, 4, 5
Zähl sie nach, es sind genau 6. Der höchste Arrayindex in einem
Array ist daher immer um 1 kleiner als die Anzahl der Elemente die
man bei der Variablendefinition angegeben hat. Ein Zugriff auf
a[6] wäre definitiv ein schwerer Fehler.
Konsequenterweise lautet eine Schleife, die alle Elemente von a
besucht, so:
for( i = 0; i < 6; i++ )
// mach was mit a[i]
Eine for-Schleife nach dem Muster
for(i = 2; i <= 32; i++)
auf einem Array, deutet auf ein Nichtverständnis von Arraybehandlung
in C hin:
* Es ist ungewöhnlich, dass die Schleife mit 2 beginnt.
Normalerweise beginnt die Schleife mit 0, weil 0 das erste
Array Element ist. In deinem Fall kann die Schleife mit 1, also
dem zweiten Array Element beginnen, weil ja das erste Element
einfach mal als das temporär kleinste Element angenommen werden
kann.
Eine 2 als Anfangswert ist normalerweise ein Indiz für die
'Array Indizes beginnen bei 1' Fraktion. Das wäre grober Unfug.
Gewöhn dich daran, dass in C bei 0 zu zählen begonnen wird und
du hast in Zukunft weniger Probleme
* das <=
wenn eine for-Schleife zur Bearbeitung von Arrays nicht nach
dem Muster
for( i = 0; i < Anzahl_Array_Element; i++ )
aussieht, dann sollten sofort alle Alarmglocken bimmeln. Denn
meistens ist dann irgendwas faul. Der häufigste Fall ist das
Nichtverstehen, dass aus der Tatsache das Array Inidzes bei 0
beginnen folgt, das der höchste zulässige Index Wert immer um
1 kleiner als die Anzahl der Elemente ist
int b[6];
for( i = 1; i <= 6; i++ )
b[i] = 5;
ist nun mal definitv falsch. Es gibt kein Element b[6]!
In seltenen Fällen kommt es tatsächlich vor, dass ein <= klarer
die Absicht hinter der Schleife ausdrückt. Aber selbst dann ist
es oft besser dies durch ein < auszudrücken und dafür den Vergleichswert
zu korrigieren. Und sei es nur deshalb, weil die Form der Schleife
so ist, wie man sich daran gewöhnt hat und schnell und ohne gross
Nachzudenken analysieren kann.
Die Standardform
for( i = 0; i < 6; i++ )
liefert für i alle Zahlen von 0 bis 5. Also genau alle Zahlen
die als gültige Indizes für ein Array der Größe 6 gelten.
Und diese 6 findet sich in der for-Schleife wieder.