Zuweisung einer Funktion zu einer Variable



  • Hallo liebe Community! 🙂

    Bin neu hier im Forum und habe gleich Mal eine erste Frage...:
    Gibt es eine Möglichkeit, wie ich eine Funktion/Methode einer Variablen zuweisen kann?

    also zum Beipsiel:

    int a = add();

    Das ist natürlich der falsche Datentyp aber halt nur als Beipsiel.

    Danke schon mal im voraus an Euch alle! 🙂
    --------------------
    Train



  • Meinst du Funktionszeiger?

    #include<stdio.h>
    
    int pow2(int n)
    {
            return n * n;
    }
    
    int pow3(int n)
    {
            return n * n * n;
    }
    
    int main(void)
    {
            int (*pow)(int);
    
            int num = 3;
    
            pow = pow2;
            printf("%d hoch 2: %d\n",num,pow(num));
    
            pow = pow3;
            printf("%d hoch 3: %d\n",num,pow(num));
    
            return 0;
    }
    


  • Mhh naja ich glaube da muss ich doch bisschen weiter ausholen.

    Also es geht um ein simplen "Rechner". Der User gibt also ein was er für eine Rechenart (Addition, ...) durchführen will und zwei Zaheln.

    Jetzt soll halt das Programm das ausgeben, also zum Beispiel:
    1 + 1 = 2

    Da ist es ja einfach mit printf() das folgende zu schreiben:

    printf("%d + %d = %f", Zahl1, Zahl2, add());
    

    Mein Problem ist es jetzt aber das der nutzer ja Addition, Subtraktion, Multiplikation und Division eingeben kann, also müsste bei dem printf() am ende die Funktion die da eingegeben wird Variable sein wie die Zahlen. Da stell ich mir die frage wie ich das mache, denn wenn ich am Ende wo die Funktion hinkommt eine if-Anweisung platziere kommt vom Compiler ein Fehler.

    ------------------
    Gruß Train



  • rechnung == add ? add() : rechnung == sub ? sub() : rechnung == mul ? mul() : div()
    


  • Du kannst die Rechenoperation auch als Zeichen speichern und das Ergebnis vor dem printf berechnen.

    char op;
    double Erg;
    
      op = '+'; Erg = add(...);
    ...
    printf("%d %c %d = %f", Zahl1, op, Zahl2, Erg);
    

    Die verschiedenen Berechnungen kannst du dann in einem switch machen.



  • Danke erst einmal für die Antworten!! 🙂

    Ich habe das von Train2 gleich mal versucht umzusetzen, gibt mir aber noch einen Fehler aus und zwar E1010 also Type missmatch.

    Meine Zeile:

    rechenart_eingabe[3] == (char)"add" ? add(Zahl1, Zahl2) : rechenart_eingabe[3] == (char)"sub" ? sub(Zahl1, Zahl2) : rechenart_eingabe[3] == (char)"mul" ? multi(Zahl1, Zahl2) : div(Zahl1, Zahl2);
    

    Es sind alles double Werte. So deklariert und auch in den Funktionen so angegeben.

    PS: Wieso zeigt er bei mir den Code nicht an wie bei Euch?
    ----------------
    Gruß Train


  • Mod

    Train schrieb:

    PS: Wieso zeigt er bei mir den Code nicht an wie bei Euch?

    Hast du vielleicht versehentlich das Häkchen bei "BBCode deaktivieren" gesetzt? Siehe hier unter der Kategorie "Probleme und Lösungen":
    Wie man seinen Beitrag lesbar formatiert

    Zum Problem: Wenn du Zeichenketten in chars umcastest, dann läuft etwas gewaltig schief. Kein Wunder, wenn das nicht funktioniert, darüber solltest du froh sein. Außerdem würde ich sowieso den Vorschlag von Train2 meiden und mich eher an DirkB orientieren. Der Vorschlag von Train2 ist extrem unleserlich und schwer zu verstehen und zu warten.



  • Dankeschön Sepp3 🙂

    Hat alles geklappt! Danke an Euch alle 🙄


Anmelden zum Antworten