Ja, ist ein schöner Anfängerfehler - da muss jeder durch.
Du hast dort die Schleife mit dem Semikolon bereits abgeschlossen. Das Semikolon steht für die leere Anweisung; d.h. in der Schleife passiert nichts. Allerdings wird j natürlich hochgezählt - bis j gleich 4 ist. Nach der Schleife, innerhalb der eckigen Klammern, wird versucht an die Speicherstelle von ar[4] etwas zu speichern, aber die Speicherstelle ar[4] gehört gar nicht mehr zum Array dazu!
warum eingentlich ++j und nicht j++ Ist das egal? Funktioniert auf beide Weisen nicht...
Das eine ist der Präinkrementoperator, das andere der Postinkrementoperator.
Natürlich gibt's einen Unterschied:
C:
int a = 5, b, c;
b = ++a;
c = a++;
Nachdem dieser Code ausgeführt wurde ist a = 7, b = 6, c = 6.
Das liegt daran, das ++a (der Präinkrementoperator) im Grunde erst den Wert von a erhöht und dann den neuen Wert zurückgibt. Während a++ (Postinkrementoperator) den Wert von a auch erhöht aber noch den alten Wert von a zurückgibt - also als wenn a erst hinterher erhöht worden wäre.
Wenn du den Rückgabewert des Operators nicht verwendest (so wie in der for-Schleife), ist es egal welchen Operator du nimmst.
Gruß
\edit: Dann hab ich grad noch einen anderen Fehler bemerkt (du mußt schon richtig abschreiben
). Man darf hinter eine Schleife und eine if-Anweisung nur eine Anweisung schreiben.
C:
#
if(ar[i]<min) /*wenn array i kleiner min ist, wird arry i zum neuen minimum*/
min = ar[i];
nm=i;
Wenn du das so schreibst, gilt das if nur für die erste Anweisung, nämlich für
In diesem Fall muß man die Anweisungen in einen Block zusammenfassen:
C:
#
if(ar[i]<min) { /*wenn array i kleiner min ist, wird arry i zum neuen minimum*/
min = ar[i];
nm=i;
}