Tableau de fonctions en C

Résolu/Fermé
UNIX/VI/SHELL Messages postés 87 Date d'inscription mercredi 12 juillet 2006 Statut Membre Dernière intervention 8 avril 2009 - 22 déc. 2008 à 16:36
UNIX/VI/SHELL Messages postés 87 Date d'inscription mercredi 12 juillet 2006 Statut Membre Dernière intervention 8 avril 2009 - 22 déc. 2008 à 20:47
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.

2 réponses

kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
22 déc. 2008 à 16:45
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527
22 déc. 2008 à 16:47
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 mercredi 12 juillet 2006 Statut Membre Dernière intervention 8 avril 2009 7
22 déc. 2008 à 16:49
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527 > UNIX/VI/SHELL Messages postés 87 Date d'inscription mercredi 12 juillet 2006 Statut Membre Dernière intervention 8 avril 2009
22 déc. 2008 à 16:50
Euh...ça y est je comprends plus...
0
UNIX/VI/SHELL Messages postés 87 Date d'inscription mercredi 12 juillet 2006 Statut Membre Dernière intervention 8 avril 2009 7
22 déc. 2008 à 16:57
En fait ton programme et code est impecc. Merci !
0
UNIX/VI/SHELL Messages postés 87 Date d'inscription mercredi 12 juillet 2006 Statut Membre Dernière intervention 8 avril 2009 7
22 déc. 2008 à 17:02
En fait non. Si je veut appeler une fonction (quelque soit la contenance), comment faire ?
0
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527 > UNIX/VI/SHELL Messages postés 87 Date d'inscription mercredi 12 juillet 2006 Statut Membre Dernière intervention 8 avril 2009
22 déc. 2008 à 17:03
Comment ça?
0
UNIX/VI/SHELL Messages postés 87 Date d'inscription mercredi 12 juillet 2006 Statut Membre Dernière intervention 8 avril 2009 7 > kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016
22 déc. 2008 à 17:21
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 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 1 527 > UNIX/VI/SHELL Messages postés 87 Date d'inscription mercredi 12 juillet 2006 Statut Membre Dernière intervention 8 avril 2009
22 déc. 2008 à 17:58
En ce tu retournes un char:
(char *)(*op)(void);
0
UNIX/VI/SHELL Messages postés 87 Date d'inscription mercredi 12 juillet 2006 Statut Membre Dernière intervention 8 avril 2009 7 > kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016
22 déc. 2008 à 18:32
Ca marche pas avec typedef. je comprend pas.
0