CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Lancement fonction d'après un scanf

Silver_Namida
Silver_Namida
Niveau 5
08 mars 2008 à 12:38:48

Bonjour, alors je voudrais savoir s'il était possible de faire en sorte qu'une variable permette de choisir une fonction à lancer en langage C sans passer par un switch.

Je m'explique: en fait ce que j'essaye de faire c'est de faire en sorte que l'on demande une chaîne de caractère à l'utilisateur via un scanf, celui-ci entre le nom de la fonction, Machin par exemple, et apres verification que la fonction Machin existe dans le programme le logiciel va lancer la fonction Machin() qu'il aura trouvée, j'essaie d'éviter de devoir passer par un switch qui sera super lourd s'il y a beaucoup de fonctions dans le programme.
Mais je ne sait pas comment faire pour faire en sorte que le programme fasse le lien entre le char et le nom de la fonction.
Voila un petit schéma pour visualiser la manière dont marche cette partie du programme:

Demande du nom de la fonction à lancer via un scanf.
||
\/
Vérification qu'elle existe dans le programme.
||
\/
Exécution de la fonction dont le nom correspond au nom entré dans le scanf.

Je cherche a faire un petit jeu en console dans lequel l'utilisateur doit gérer des trucs, je n'ai pas encore défini clairement comment ça va marcher mais je sait que le problème que j'ai posé ici est la base du fonctionnement du programme.
Le joueur va en fait "jouer" via des lignes de commandes un peu comme sous Ms-Dos ou Shell mais ici ce seront des commandes simplifiés et limités au fonctionnement du programme.

Voilà merci encore =)

guyver2
guyver2
Niveau 10
08 mars 2008 à 12:52:44

ce n'est pas possible de le faire comme tu voudrais. Surtout en C. Il faudrait que le code se réecrive tout seul et se recompile en cours d'execution ...

Tu n'a pas vraiment d'autre choix que de passer par un switch. Eventuellement tu peux passer par un tableau de fonction mais il ne sera pas indexé par les noms des fonctions. Sinon tu as les tables de hachage mais c'est pas le plus simple a implementer.

Je te conseil de faire un tableau de correspondance nom de fonction -> code (int)

genre:
0 - "parler"
1 - "marcher"
2 - "tourner"
...

une fonction qui a partir d'une chaine te renvois le code de la fonction correspondante (ou une erreur si elle n'existe pas)

et pour finir un tableau de fonction dans lequel tu rentre tes fonctions dans le meme ordre que le 1er tableau

0 - void parler()
1 - void marcher()
2 - void tourner()
...

je sais pas trop si j'ai été clair ou meme pertinent, mais bonne chance pour la suite

Silver_Namida
Silver_Namida
Niveau 5
08 mars 2008 à 13:15:26

Ok Guyver2 je vais essayer de faire comme tu a dit, merci encore pour l'aide et la réponse rapide =)

dnob700
dnob700
Niveau 10
08 mars 2008 à 18:16:56

Bon, en fait c'est possible, il faut passer par les mécanisme de chargement dynamique de DLL.

Par exemple un petit exemple sous windows :
http://repository.sectionpc.info/C/DynFct.c

Le code est prévu pour Visual C++, ça doit pouvoir fonctionner sur Dev C++, mais il faudra adapter les idrectives d'exportation des fonctions (peut-être avec un fichier .def, je ne sais pas ce que veux dev cpp).

Pour linux, on doit pouvoir faire quelque chose de similaire mais il faudra d'autres appels systèmes.

dnob700
dnob700
Niveau 10
08 mars 2008 à 18:22:32

je n'étais peut-être pas clair dans mon message, mais il n'y a pas beoin de faire une DLL, c'est juste qu'on charge des fonctions depuis le programme en cours comme s'il s'agissait d'une DLL (mais c'est juste un exécutable).

Et ces déclaration étrange avant le nom des fonction servent à dire au système que l'on veux que ces fonctions puisse être chargé de cette façon.

Le résultat n'est peut-être pas très beau, et ce n'est certainement pas une bonne façon de programmer (ça ne devrait pas être utiliser dans un vrai programme), mais ça fait exactement ce qui était demandé par silver_namida (si la fonction n'existe pas, alors fct == NULL).

guyver2
guyver2
Niveau 10
09 mars 2008 à 01:06:08

bah punaise, ça m'en bouche un coin ce genre de truc.

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment