Array an Funktion übergeben?



  • Halli hallo,

    ich bin ein totaler Neuling in C und probiere mich gerade an einigen Aufgaben.

    Nun komme ich aber nicht weiter, ich soll nämlich 2 Funktionen deklarieren und diese dann in der main Funktion aufrufen.

    1. Funktion (einlesen eines Arrays mit beliebiger Größe)

    int einlesen() {
        int i;
        int n;
    
        printf("Wie viele Werte möchten Sie eingeben? ");
        scanf("%i", &n);
        printf("\n");
    
        int eingabe[n];
    
        for (i=0;i<n;i++) {
            printf("Bitte geben Sie den %i.Wert ein: ", i+1);
            scanf("%i", &eingabe[i]);
        }
        printf("\n");
        printf("Sie haben folgende Werte eingegeben: ");
    
        for (i=0;i<n;i++) {        
            printf("%i, ",eingabe[i]);
        }
    	return eingabe[n];
    }
    

    Und in der 2. Funktion soll ich den Mittelwert des Arrays berechnen und ausgeben, ich bekomme aber immer wieder Fehlermeldungen wie "use of undeclared identifier eingabe" und dies auch für n und i.

    So sieht mein code bis jetzt aus:

    int mittelwert(int eingabe[], int n, int i) {
        float mittel;
        int summe;
    
        for (i=0;i<n;i++) {
            summe+=eingabe[n];
            mittel=summe/i;
        }
        printf("\n");
        printf("Der Mittelwert ist %f", mittel);
    
        return mittel;
    }
    

    Und in der main Funktion dann so:

    int main() {
        einlesen();
        int mittel=mittelwert(eingabe[n], n, i);
    
    }
    

    Ich hoffe ihr könnt mir helfen, denn ich weiß nicht, wie ich das Array in die Funktion Mittelwert übergeben kann und dort damit Weiterrechnen kann.

    Vielen dank schon mal!



  • Du benutzt lokale Variablen. Das ist auch gut so.
    Lokale Variablen heißeb lokale Variablen, weil sie in der Funktion lokal sind und nicht nach außen in Erscheinung treten.

    Das Array eingabe existiert nur in der Funktion einlesen und ist nach deren Ende auch ungültig.

    eingabe[n] (in Zeile 21) wäre ein einzelnes Element vom Array, doch es liegt außerhalb des Arrays, somit ist es ungültig.

    Warum hat deine Funktion mittelwert drei Parameter?
    Die Variable mittel ist vom Typ float . Du definierst die Funktion aber mit Rückgabetyp int .
    Das passt nicht zusammen.

    Deine main kennt keine Variablen eingabe, n oder i. Da meckert dann der Compiler mal sehr offensichtlich.

    Frag vorher, wieviel Werte es werden sollen, besorge dann den Speicher dafür und übergib diese Daten dann an einlesen (so wie du es auch bei mittelwert gemacht hast)



  • Danke für deine Antwort!

    Nun also:

    Erst mal das mit dem int Rückgabewert habe ich geändert, danke!

    Bei der Funktion Mittelwert habe ich 3 Parameter gewählt, damit die main Funktion das Array, die Array-Grenze (n) sowie die Array Werte (i) übernimmt, ist das richtig? Oder habe ich da einen Denkfehler?

    Und zu guter letzt: ich habe doch die Frage, wieviele Array Werte es sein sollen zu Anfang gestellt und die eingegebene Zahl dann in n gespeichert. Ist es nicht das, was du meinst?

    Gruß 🙂



  • Ach, und wenn ich den Code mit dem return bei einlesen so ändere:

    (Nur der Schluss)

    for (i=0;i<n;i++) {        
            printf("%i, ",eingabe[i]);
    	return eingabe[];
        }
    }
    

    dann wird nur der 1.Eingabewert angezeigt. Wie schaffe ich es, dass alle Werte aufgelistet werden?



  • Dila57 schrieb:

    Bei der Funktion Mittelwert habe ich 3 Parameter gewählt, damit die main Funktion das Array, die Array-Grenze (n) sowie die Array Werte (i) übernimmt, ist das richtig? Oder habe ich da einen Denkfehler?

    Ja.
    Das erste was du mit der Variable i in der Funktion machst ist, sie auf 0 zu setzen (in der for-Schleife).
    Also brauchst du den Wert von außen gar nicht. Dann kann die Variable auch lokal sein (wie in einlesen).
    Besser noch, lokal in der Schleife.
    Den Mittelwert brauchst du auch erst nach der Schleife berechnen.

    Dila57 schrieb:

    Und zu guter letzt: ich habe doch die Frage, wieviele Array Werte es sein sollen zu Anfang gestellt und die eingegebene Zahl dann in n gespeichert. Ist es nicht das, was du meinst?

    Du hast die Frage in einlesen gestellt.
    Stelle sie in main und besorge auch dort den Speicher (das Array).
    Diese beiden Werte übergibst du an einlesen.
    (Es geht zwar auch anders, aber du hast wahrscheinlich noch nicht von malloc gehört)

    Noch etwas:
    Stelle den Level für Compilerwarnungen auf Maximum.
    Der Compiler erkennt viele mögliche Fehler, die aber trotzdem gültiger Code sind und warnt dann.
    (z.b die Initialisierung von summe)



  • Dila57 schrieb:

    Ach, und wenn ich den Code mit dem return bei einlesen so ändere:

    (Nur der Schluss)

    for (i=0;i<n;i++) {        
            printf("%i, ",eingabe[i]);
    	return eingabe[];
        }
    }
    

    dann wird nur der 1.Eingabewert angezeigt. Wie schaffe ich es, dass alle Werte aufgelistet werden?

    So gar nicht!

    DirkB schrieb:

    Frag vorher, wieviel Werte es werden sollen, besorge dann den Speicher dafür und übergib diese Daten dann an einlesen



  • Dir fehlen noch wichtige Kenntnisse in C:
    - was sind arrays?
    - wie legt man arrays an?
    - wie verweist man in funktionsparametern auf arrays?
    - was sind adressen und zeiger?

    Du kommst nicht drumrum, dich mit diesen grundlagen sorgfältig vertraut zu machen.
    Es macht keinen sinn, die böcke in deinem code einzeln zu korrigieren.
    Mache dich mit diesen hinweisen schlau und poste neu.


Anmelden zum Antworten