Menu mit array



  • Hallo Leute, habe mal eine Frage, ich habe gehört, dass man ein Menu auch mit einem array Programmieren kann, und nicht nur mit den switch und case anweisungen. Jetzt würde mich mal interresieren, wie das funktionieren soll. Kann mir da einer weiterhelfen?

    Würde mich über schnelle antwort freuen. 🙂



  • Das geht mit einem Array aus Funktionszeigern:

    #include <stdio.h>
    
    int a(void)
    {   puts("a");
        return 0;
    }
    
    int b(void)
    {   puts("b");
        return 0;
    }
    
    int c(void)
    {   puts("c");
        return 0;
    }
    
    int main(void)
    {
        int (*fkt[])(void) = { a, b, c }, i;
    
        for (i = 0; i < 3; i++) fkt[i]();
    
        return 0;
    }
    

    Das Programm gibt a b c aus.



  • OK, das habe ich verstanden, ist ja recht simpel, aber was, wenn ich Funktionen habe, die unterschiedliche Parameter anzahlen haben?



  • Das lässt sich auch lösen:

    #include <stdio.h>
    
    int a(int n, ...)
    {   puts("a");
        return 0;
    }
    
    int b(int n, ...)
    {   puts("b");
        return 0;
    }
    
    int c(int n, ...)
    {   puts("c");
        return 0;
    }
    
    int main(void)
    {
        int (*fkt[])(int, ...) = { a, b, c }, i;
    
        fkt[0](1);
        fkt[1](1,2);
        fkt[2](1,2,3);
    
        return 0;
    }
    

    Die Parameter musst Du dann mit va_* auswerten. Es gibt aber auch noch andere Lösungen...



  • Ok, und wie wäre dann eine der anderen Lösungen? Weil die habe ich nicht so ganz verstanden, Ich bin halt erst anfänger in der Sprache, Programmiere noch nicht so lange. Ich habe jetzt zum Beispiel die Funktionen:

    nt a(int c,int d) und
    int b(int c,int d,int e,int f)

    Was muss ich den bei so einem fall tun?



  • Hallo ...

    beispielsweise könnte man alle Parameter in einer Union zusammenfassen und dann in den einzelnen Funktionen auswerten:

    #include <stdio.h>
    
    typedef struct {
        int n;
    
        struct {  /* Parameter für a() */
            char *p;
        } a;
    
        struct {  /* Parameter für b() */
            int n;
        } b;
    
        /* .... */
    } tParam, *pParam;
    
    int a(pParam param)
    {
        printf("Name: %s\n", param->a.p);
        return 0;
    }
    
    int b(pParam param)
    {
        printf("Alter: %d\n", param->b.n);
        return 0;
    }
    
    int main(void)
    {
        tParam param;
        int (*fkt[])(pParam) = { a, b };
    
        param.a.p = "Huber";
        fkt[0](¶m);
    
        param.b.n = 20;
        fkt[1](¶m);
    
        return 0;    
    }
    

    Man könnte auch einzelne Strukturen anlegen, und den Funktionen dann nur void * Zeiger darauf übergeben.

    Letztendlich ist dass aber alles recht umständlich und mit einer einfachen switch() viel einfacher.



  • OK danke, ich glaube das wird dann doch wirklich alles zu viel für mich und ich bleibe lieber bei der switch() anweisung. Hast recht, ist viel einfacher. Aber Trotzdem dankeschön.


Anmelden zum Antworten