Tableau de fonctions en C

Résolu
UNIX/VI/SHELL Messages postés 89 Statut Membre -  
UNIX/VI/SHELL Messages postés 89 Statut Membre -
Bonjour,

Je voudrais réaliser un programme; Dans ce programme il faudrait appeler des fonctions en fonction d'une autre variable, en utilisant un tableau de fonctions.

Comment feriez-vous ? Avec un peu de code.
A voir également:

2 réponses

kilian Messages postés 8854 Statut Modérateur 1 526
 
Salut,

Exemple, on a deux nombres (3 et 5), si l'utilisateur rentre +, on fait l'addition, s'il rentre *, on fait la multiplication:
#include <stdio.h>


typedef int (*op)(int, int); // Type pointeur vers fonction qui prend deux entiers en paramètres et retourne un entier

int addition(int a, int b)
{
    return a + b;
}

int multiplication(int a, int b)
{
    return a * b;
}

//Tableau de pointeur de fonctions avec nos deux fonctions:
op tab_op[] = {
    addition,
    multiplication
};

int main()
{
    int a = 3, b = 5;
    char c = getchar();

    switch (c) {
    case '+':
        printf("%d\n", tab_op[0](a, b));
        break;

    case '*':
        printf("%d\n", tab_op[1](a, b));
        break;

     default:
        printf("%c toi même!\n", c);
        break;
     }
     return 0;
}
4
kilian Messages postés 8854 Statut Modérateur 1 526
 
Le même sans typedef:
#include <stdio.h>

int addition(int a, int b)
{
    return a + b;
}

int multiplication(int a, int b)
{
    return a * b;
}

//Tableau de pointeur de fonctions avec nos deux fonctions:
int (*tab_op)(int, int) [] = { //Etrange hein?
    addition,
    multiplication
};

int main()
{
    int a = 3, b = 5;
    char c = getchar();

    switch (c) {
    case '+':
        printf("%d\n", tab_op[0](a, b));
        break;

    case '*':
        printf("%d\n", tab_op[1](a, b));
        break;

     default:
        printf("%c toi même!\n", c);
        break;
     }
     return 0;
}
0
UNIX/VI/SHELL Messages postés 89 Statut Membre 7
 
Mais supposons que cela soit dans un jeu en mode texte. Comment vais-je faire ? Puisque il s'agit de déplacement. Il n'y aurait en plus, aucun intéret de code les possibilités de déplacement dans chaque salle.
0
kilian Messages postés 8854 Statut Modérateur 1 526 > UNIX/VI/SHELL Messages postés 89 Statut Membre
 
Euh...ça y est je comprends plus...
0
UNIX/VI/SHELL Messages postés 89 Statut Membre 7
 
En fait ton programme et code est impecc. Merci !
0
UNIX/VI/SHELL Messages postés 89 Statut Membre 7
 
En fait non. Si je veut appeler une fonction (quelque soit la contenance), comment faire ?
0
kilian Messages postés 8854 Statut Modérateur 1 526 > UNIX/VI/SHELL Messages postés 89 Statut Membre
 
Comment ça?
0
UNIX/VI/SHELL Messages postés 89 Statut Membre 7 > kilian Messages postés 8854 Statut Modérateur
 
Si je veut qu'une fonction qui ne contienne que du texte s'affiche, je fais comment, puisque dans ton code, le programme n'affiche que des valeurs numériques.
0
kilian Messages postés 8854 Statut Modérateur 1 526 > UNIX/VI/SHELL Messages postés 89 Statut Membre
 
En ce tu retournes un char:
(char *)(*op)(void);
0
UNIX/VI/SHELL Messages postés 89 Statut Membre 7 > kilian Messages postés 8854 Statut Modérateur
 
Ca marche pas avec typedef. je comprend pas.
0