Zahlen in Array einlesen und größte Zahl ausgeben

sr4

Grünschnabel
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

Erfahrenes Mitglied
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:
C:
//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
 
Zuletzt bearbeitet:

sr4

Grünschnabel
Was bedeutet das " size_t" und wieso hast du das in der for Schleife?
Muss in die for-Schleife nicht noch :
C:
printf("Bitte die .% Zahl eingeben:  ",&b)