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.
Configuration: Mac OS X
Safari 523.12.2

2 réponses

  1. kilian Messages postés 8675 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
    1. kilian Messages postés 8675 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
    2. 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
      1. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > UNIX/VI/SHELL Messages postés 89 Statut Membre
         
        Euh...ça y est je comprends plus...
        0
  2. UNIX/VI/SHELL Messages postés 89 Statut Membre 7
     
    En fait ton programme et code est impecc. Merci !
    0
    1. 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
    2. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > UNIX/VI/SHELL Messages postés 89 Statut Membre
       
      Comment ça?
      0
    3. UNIX/VI/SHELL Messages postés 89 Statut Membre 7 > kilian Messages postés 8675 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
    4. kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention   1 526 > UNIX/VI/SHELL Messages postés 89 Statut Membre
       
      En ce tu retournes un char:
      (char *)(*op)(void);
      0
    5. UNIX/VI/SHELL Messages postés 89 Statut Membre 7 > kilian Messages postés 8675 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Ca marche pas avec typedef. je comprend pas.
      0