Ein Array durchlaufen
Du kannst ein ganzes Array nicht auf einmal ausgeben. Wenn du printf("%d\n", punkte); versuchst, lässt sich das Programm nicht kompilieren:
main.c:5:20: error: format specifies type 'int' but the argument has type 'int *' [-Werror,-Wformat]%d gibt eine ganze Zahl aus, aber printf hat das ganze Array punkte bekommen. (C schreibt seinen Typ hier als int *. Was der Stern bedeutet, lernst du in der Lektion über Zeiger.) Ein Array muss Element für Element ausgegeben werden.
Bei fünf Elementen würden fünf printf genügen. Bei hundert wäre es viel Tipparbeit. Zum Glück muss ein Index keine Zahl sein, die im Code steht. Er kann auch eine Variable sein: Wenn i gleich 2 ist, dann ist punkte[i] dasselbe wie punkte[2]. Und eine for-Schleife kann i durch alle Indizes führen, von 0 bis zum letzten:
int punkte[] = {80, 92, 75, 60, 88};
for (int i = 0; i < 5; i++) {
printf("%d\n", punkte[i]);
}Das gibt Folgendes aus:
80
92
75
60
88Im ersten Durchlauf der Schleife ist i gleich 0, und die Schleife gibt punkte[0] aus. Im zweiten Durchlauf ist i gleich 1, und sie gibt punkte[1] aus, und so weiter bis punkte[4]. Die Bedingung lautet i < 5, nicht i <= 5: Das Array hat 5 Elemente, der letzte Index ist also 4. In der nächsten Übung siehst du, was beim Index 5 passiert.
Die Anzahl der Elemente kommt in einem Programm oft an mehreren Stellen vor, zum Beispiel in mehreren Schleifen. Es ist eine gute Idee, sie in einer Konstanten zu speichern, damit sie nur einmal geschrieben wird:
int punkte[] = {80, 92, 75, 60, 88};
const int ANZAHL = 5;
for (int i = 0; i < ANZAHL; i++) {
printf("Test %d: %d Punkte\n", i + 1, punkte[i]);
}Das gibt Folgendes aus:
Test 1: 80 Punkte
Test 2: 92 Punkte
Test 3: 75 Punkte
Test 4: 60 Punkte
Test 5: 88 PunkteDie Nummer des Tests ist i + 1, denn Menschen zählen Tests ab 1, während Indizes bei 0 beginnen. Die Konstante muss zum Array passen. Wenn du dem Array eine sechste Punktzahl hinzufügst und vergisst, ANZAHL zu ändern, geht die Schleife trotzdem nur durch fünf Elemente, und die neue Punktzahl wird nie ausgegeben.
Eine Schleife kann die Elemente auch in einer Zeile ausgeben, getrennt durch Kommas. Das Komma steht vor jedem Element außer dem ersten, dem mit dem Index 0:
int punkte[] = {80, 92, 75, 60, 88};
const int ANZAHL = 5;
for (int i = 0; i < ANZAHL; i++) {
if (i > 0) {
printf(", ");
}
printf("%d", punkte[i]);
}
printf("\n");Das gibt Folgendes aus:
80, 92, 75, 60, 88Das letzte printf("\n") steht nach der Schleife. Es beendet die Zeile, wenn alle Elemente ausgegeben sind.
So schreibst du es:
Anweisungen
- 1
Erstelle unter der Zeile, die den Kapitän ausgibt, eine Konstante
ANZAHLmit der Zahl der Spieler,5. Schreibe dann einefor-Schleife, deren Variable bei0beginnt und die Indizes durchläuft, solange sie kleiner alsANZAHList. - 2
Gib in der Schleife jede Trikotnummer in einer eigenen Zeile aus:
7,10,23,4und11. - 3
Schreibe darunter eine zweite Schleife, die alle Nummern in einer Zeile ausgibt, getrennt durch ein Komma und ein Leerzeichen:
7, 10, 23, 4, 11.