# Zahlen in Array einlesen und größte Zahl ausgeben



## sr4 (29. November 2017)

Hallo,

ich habe folgendes Problem: ich möchte 5 Zahlen in ein Array speichern und den größten davon ausgeben. Leider komm ich einfach nicht weiter.

mein bisheriger Code:


int i;
int max;
int zahl;

void main() {
int arr[5];


for (i = 1; i < 6; i++) {
printf("Bitte die %d.Zahl eingeben: ", i);
scanf_s("%d", &arr[zahl]);

if (arr[0] > arr[1] && arr[0] > arr[2] && arr[0] > arr[3] && arr[0] > arr[4]){
arr[0] = max;
}
if (arr[1] > arr[0] && arr[1] > arr[2] && arr[1] > arr[3] && arr[1] > arr[4]) {
arr[1] = max;
}
if (arr[2] > arr[0] && arr[2] > arr[1] && arr[2] > arr[3] && arr[2] > arr[4]) {
arr[2] = max;
}
if (arr[3] > arr[0] && arr[3] > arr[1] && arr[3] > arr[2] && arr[3] > arr[4]) {
arr[3] = max;
}
if (arr[4] > arr[0] && arr[4] > arr[1] && arr[4] > arr[2] && arr[4] > arr[3]) {
arr[4] = max;
}


}
printf("Die groesste Zahl ist: %d", max);


----------



## cwriter (29. November 2017)

sr4 hat gesagt.:


> Hallo,
> 
> ich habe folgendes Problem: ich möchte 5 Zahlen in ein Array speichern und den größten davon ausgeben. Leider komm ich einfach nicht weiter.
> 
> mein bisheriger Code:


Gerne auch mit Codetags [code=c][/code] 

Dein Code ist ein bisschen unschön: Du brauchst 6*6 Vergleiche, um die grösste Zahl zu finden (Der 5. Vergleich fehlt eigentlich noch).
Dabei ist > hier ungünstig, du willst ja eigentlich >= haben (es könnte ja nur _eine_ grösste, nicht _die_ grösste Zahl geben).
Dein "schlimmster" Fehler ist aber die Zuweisung: Du setzt die Arrayelemente auf max, nicht umgekehrt (die linke Seite wird immer gesetzt, die rechte gelesen).

Dein scanf() hat den Fehler, dass du auf den Index "zahl" zugreifen willst, der aber nicht definiert ist. Du wolltest wohl i verwenden, aber das solltest du von [0, 5[ zählen, nicht von [1, 6[.

Aber, um den Code etwas schöner zu haben: Das Maximum kann man schneller finden:

```
//Array eingelesen

int max = arr[0]; //Nimm an, dass arr[0] das grösste Element ist.

for(size_t i = 1; i < 5; ++i)
{
    if(arr[i] > max) {
        //Annahme war falsch (wir haben noch nicht das grösste Element in max)
        max = arr[i]; //Übernimm das Maximum
    }
}
//Wir haben sicher alle Elemente betrachtet, und da wir immer ersetzt haben,
//wenn es ein grösseres Element gab, ist in max der grösste Wert gespeichert.

//Ausgabe
```

Gruss
cwriter


----------



## sr4 (29. November 2017)

Was bedeutet das " size_t" und wieso hast du das in der for Schleife?
Muss in die for-Schleife nicht noch : 
	
	
	



```
printf("Bitte die .% Zahl eingeben:  ",&b)
```


----------



## cwriter (29. November 2017)

sr4 hat gesagt.:


> Was bedeutet das " size_t" und wieso hast du das in der for Schleife?


size_t ist schlicht der Typ für's Zählen von Elementen (normalerweise 64 bit unsigned int).


sr4 hat gesagt.:


> Muss in die for-Schleife nicht noch :


Doch, hier wird ja nur das Maximum bestimmt.

Gruss
cwriter


----------

