Tableau de fonctions en C

Résolu
UNIX/VI/SHELL Messages postés 87 Date d'inscription   Statut Membre Dernière intervention   -  
UNIX/VI/SHELL Messages postés 87 Date d'inscription   Statut Membre Dernière intervention   -
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   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 8732 Date d'inscription   Statut Modérateur Dernière intervention   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 87 Date d'inscription   Statut Membre Dernière intervention   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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > UNIX/VI/SHELL Messages postés 87 Date d'inscription   Statut Membre Dernière intervention  
 
Euh...ça y est je comprends plus...
0
UNIX/VI/SHELL Messages postés 87 Date d'inscription   Statut Membre Dernière intervention   7
 
En fait ton programme et code est impecc. Merci !
0
UNIX/VI/SHELL Messages postés 87 Date d'inscription   Statut Membre Dernière intervention   7
 
En fait non. Si je veut appeler une fonction (quelque soit la contenance), comment faire ?
0
kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > UNIX/VI/SHELL Messages postés 87 Date d'inscription   Statut Membre Dernière intervention  
 
Comment ça?
0
UNIX/VI/SHELL Messages postés 87 Date d'inscription   Statut Membre Dernière intervention   7 > kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention  
 
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 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > UNIX/VI/SHELL Messages postés 87 Date d'inscription   Statut Membre Dernière intervention  
 
En ce tu retournes un char:
(char *)(*op)(void);
0
UNIX/VI/SHELL Messages postés 87 Date d'inscription   Statut Membre Dernière intervention   7 > kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention  
 
Ca marche pas avec typedef. je comprend pas.
0