Benötige Hilfe bei der Fehler-Suche!



  • Ich habe ein Programm zur Berechnung der KDA für irgendwelche Spiele mit einer lokalen Variable geschrieben. Da Ich noch ein Anfänger bin mit C, wäre es toll wenn mir jemand helfen könnte, weil Ich diesen Fehler schon bei einem anderen Programm gemacht habe. Als Antwort kommt leider immer nur 0.000 raus.

    #include <stdio.h>
    #include <stdlib.h>
    
    float Eingabe()
    {
        char temp;
        int kills, death, assist;
    
        printf("Wieviele Kills hast du gemacht?:");
        scanf("%d%c", &kills, &temp);
    
        printf("Wie oft bist du gestorben?:");
        scanf("%d%c", &death, &temp);
    
        printf("Wieviele Assist hast du gemacht?:");
        scanf("%d%c", &assist, &temp);
    
        return (kills, death, assist);
    }
    
    float Rechner(kills, death, assist)
    {
        float KDA;
    
        KDA = kills + assist / death;
    
        return (KDA);
    }
    
    void Ausgabe(KDA)
    {
        printf("Deine KDA beträgt %1.3f", KDA);
    }
    
    int main()
    {
    
        Eingabe();
        Ausgabe();
    
        getchar();
        return 0;
    }
    

    Mod-Edit (camper): Code-Tags + clang-format



  • return(kills, death, assist);
    

    Ohne Kommentar.

    Was bedeutet KDA? "Keiner Der Ahnung hat"?

    return(KDA);
    

    Oder vielleicht "Kenner Der Ahnungslosigkeit"?



  • Fr0ggyFroggsen schrieb:

    Als Antwort kommt leider immer nur 0.000 raus.

    Welchen Wert übergibst du denn an die Funktion, die die Ausgabe macht?

    Wohin wird der Wert von der Eingabe abgelegt?

    float Eingabe()   // der (eine) Rückgabewert soll vom Typ float sein
    { int kills,death,assist;   // Drei lokale Variablen vom Typ int
    
      return(kills, death, assist); // du möchtest aber drei int zurück geben
    }
    

    Lokale Variable bedeutet, dass sie nur innerhalb der Funktion bekannt ist. Wenn die Funktion beendet wird, wird sie ungültig.

    Warum liest du immer noch ein char beim scanf mit ein?

    Stelle den Warnlevel für den Compiler auf Maximum.

    Beachte alle Warnungen und behebe deren Ursache.



  • Der prinzipielle Aufbau Deines Programms gefällt mir gut. Und Du bist da schon auf dem richtigen Weg hin zu guten Programmen.

    Allerdings funktionieren einige Sachen in C anders als Du denkst: mein erster Rat wäre daher ein gescheites Buch zu C zu ergattern.

    Für zukünfitge Codebeispiele benutz bitte die CodeTags [code="c"][/code] die Anfang und Ende Deines Codes markieren.

    Als allererstes: auch in C gilt Punkt-vor-Strichrechnung. Also musst Du entsprechend klammern.
    Zweitens: wenn Du nur mit Integern rechnest ist auch das Ergebnis ganzzahlig.
    z.B.

    int a=1, b=2; float c=a/b; // c ist 0.0
    

    Du musst also mindestens einen Operanden in eine float umwandeln ("casten").
    z.B.

    int a=1, b=2; float c=(float)a/b; // c ist 0.5
    

    Zusammengefasst:

    float kda=(float)(kill+assist)/death;
    

    Das näxte große Problem sind die Rückgabewerte und Parameter Deiner Funktionen. Wenn Du drei ints aus einer Funktion zurückgeben willst kannst Du die z.B. zusammenfassen in eine Struktur, die Du dann zwischen den Funktionen herumreichst:

    #include <stdio.h>
    
    struct kda{
      int k,d,a;
    };
    
    // eingabe ist eine Funktion ohne Parameter, die ein struct kda zurückgibt
    struct kda eingabe() {
      struct kda kda;
      printf("Wieviele Kills hast du gemacht?:");
      scanf(" %d", &kda.k);
      printf("Wie oft bist du gestorben?:");
      scanf(" %d", &kda.d);
      printf("Wieviele Assist hast du gemacht?:");
      scanf(" %d", &kda.a);
    
      return kda;
    }
    
    // druck ist eine Funktion mit einem struct kda Parameter, ohne Rückgabewert
    void druck(struct kda kda) {
      printf("k:%i, d:%i, a:%i\n", kda.k, kda.d, kda.a);
    }
    
    int main() {
      struct kda kda = eingabe();
      druck(kda);
    }
    


  • Ich bin halt nicht so freundlich wie ihr.



  • EOP schrieb:

    return(kills, death, assist);
    

    Ohne Kommentar.

    Was bedeutet KDA? "Keiner Der Ahnung hat"?

    return(KDA);
    

    Oder vielleicht "Kenner Der Ahnungslosigkeit"?

    KDA ist eine Zusammenfassung der Kills, Tode und Assists in einer Dezimalzahl und wird oft zum analysieren verwendet.


Log in to reply