Fonctions supplémentaires avec "switch"

Fermé
oli5667 Messages postés 139 Date d'inscription lundi 27 janvier 2014 Statut Membre Dernière intervention 23 novembre 2016 - Modifié par Whismeril le 5/02/2015 à 07:15
FFran6 Messages postés 13 Date d'inscription lundi 9 février 2015 Statut Membre Dernière intervention 11 février 2015 - 10 févr. 2015 à 19:25
Bonjour,

J'aimerais savoir comment rajouter des choix au fonctions de switch...
Voici mon code et vous comprendrez mieux après

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int code;
   printf("Bonjour\n:   ");
   puts ("Vous pouvez dire : 1)texte   2)texte    3) texte");

   scanf ("%d",  &code);

   switch(code)

   {
       case 1:
           puts("texte ");
           break;

       case 2:
        puts ("texte ");
        break;

       case 3:
        puts ("texte ");
        break;
   }

return 0;
}


Si je choisis la case 2, pourrais-je avoir d'autre choix qui me sont offert en fonction de cette case... Et si je choisis la case 1, pourrais-je avoir des choix adaptée à la réponse de cette case... Le but est de faire un genre de questionnaire, quand je répond quelque chose(une des case sera mon choix) et bien il me sera réofferts trois autres choix afin de développé sur mon choix de la première case.
J'espère avoir été clair
Merci d'avance

EDIT: Ajout de la coloration syntaxique.
A voir également:

4 réponses

Whismeril Messages postés 19032 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 avril 2024 931
5 févr. 2015 à 07:23
Bonjour, je ne fais pas de c, mais le principe général est souvent le même quelque soit le langage.

Je vois 2 options:
- dans ton "case X:" tu peux reposer une question et remettre un Swatch etc... Mais au delà de 2 3 couches ça sera illisible et si plusieurs choix amènent à la même question tu seras obligé d'écrire des doublons.
-tu peux mettre chaque analyse (éventuellement la question avec) dans une méthode dédiée, et dans les case tu appelles la méthode suivante qui va bien. Éventuellement si deux chemins arrivent a la même question et que dans cette question tu as besoin de savoir par quel chemin on y est arrivé, tu peu stocker chaque réponse dans un tableau

--
0
oli5667 Messages postés 139 Date d'inscription lundi 27 janvier 2014 Statut Membre Dernière intervention 23 novembre 2016 2
5 févr. 2015 à 14:29
J'aurais besoin dun exemple pour bien comprendre svp....
Mais merci quand même!
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 10/02/2015 à 15:13
Salut Oli,

1.

Comme le dit Whismeril, l'imbrication de switchs est possible, mais devient vite brouillonne et ingérable.

Ensuite, je le suis pas sûr de bien comprendre la proposition de Whismeril, qui parle de méthodes (qui sont un concept lié à l'orienté objet).

Si je lis entre les lignes sa réponse, je pense qu'il propose que tu crées des fonctions, pour traiter des nouvelles questions et choix à proposer selon les choix précédents.

Un peu, j'imagine comme l'avait fait ce contributeur au forum il y a quelques mois, dans un post concernant un autre problème :

https://forums.commentcamarche.net/forum/affich-30420410-probleme-d-affichage-avec-fonction-switch

cet exemple devrait répondre à ta demande d'un code d'illustration (si j'ai bien compris la proposition de Whismeril, donc).

2.

Cela dit, si le niveau d'imbrication est très important, cette façon de procéder a aussi ses limites (l'exemple dans le post ci-dessus le montre déjà alors qu'on n'est qu'à 2 ou 3 niveaux de profondeur). Au bout d'un moment on ne sait plus quelle fonction renvoie à quoi et à quel niveau de l'arborescence de questions elle se trouve, et on duplique à nouveau beaucoup de code.

Une autre possibilité est de déplacer l'imbrication des questions dans une structure de données adaptée à la représentation d'une arborescence de questions et de choix multiples menant à d'autres questions avec des choix multiples (des branches) ou à un résultat (une feuille).

Ce type de structure s'appelle un arbre n-aire.

Dès lors que tu as structuré des données, tu peux parcourir ton arbre selon les réponses données et créer du code qui gère l'affichage des données en parcourant l'arbre.

Si tu es débutant, la façon classique de représenter cette structure de données en C est probablement difficile à réaliser pour toi (cela suppose de maîtriser : les struct, les pointeurs et tableaux de pointeurs, l'allocation dynamique, si possible aussi la récursivité,...).

mamiemando a, par le passé, contribué à de nombreux fils qui posaient des questions sur ces sujets, avec du code, pour te donner une idée : https://forums.commentcamarche.net/forum/affich-26770633-tableau-de-pointeur-sur-arbre

tu trouves d'autres contributions sur le forum, et plein de pages sur Internet qui expliquent comment créer et gérer ces arbres en C.

3.

La solution 2 est peut être un char d'assaut pour attraper un moucheron.

Une solution intermédiaire peut être de bricoler un aplatissement de la structure de mémoire pour qu'elle tienne dans un tableau (de struct).

Cela peut paraître attrayant si ton programme ne doit pas lui même gérer l'insertion ou le retrait d'éléments de l'arbre et que tout ce que tu veux faire c'est parcourir une arborescence prédéterminée avec en prime un bénéfice apparent : tu peux préremplir ton tableau avec les données dans ton code source (au lieu d'avoir à programmer l'insertion de noeuds dans un arbre en mémoire).

La structure accessible par le tableau, pourrait, par exemple, contenir pour chaque indice :

1- une question (dans un char[], par exemple "Quel temps fait-il ?")
2- une série de choix possibles (dans un seul char[], séparés par un caractère séparateur, par exemple : "Il fait beau|Il pleut|Il y a de l'orage")
3- une série d'indices du tableau vers lesquels aller en fonction du choix fait (dans un seul char[], séparés par un caractère séparateur, par exemple : "2 10 21")
4- un indicateur d'état, par exemple à 0 si on est sur une feuille (auquel cas le 1- contient une réponse, et le 2- et 3- sont vides), et non une question. Si c'est une question, l'indicateur peut contenir le nombre de choix possibles (ce qui permet un contrôle de cohérence par les fonctions qui devront traiter les données en 2- et 3-).

En fait, tu pourrais même tout mettre dans un seul char[] sans struct, en composant ta ligne de données avec plusieurs caractères séparateurs, par exemple :

"3%Quel temps fait-il ?%Il fait beau|Il pleut|Il y a de l'orage%2 10 21"

(là, j'ai mis l'indicateur en premier)

Il te faudra prendre ton papier et ton crayon, dessiner ton arborescence et numéroter tes noeuds pour faire cela.

Cela dit, si demain tu veux faire évoluer ton arbre, tu as intérêt à ne pas perdre ton dessin, si tu veux y comprendre quelque chose :-)


Dal

edit sur la solution 3. sans struct
0
Whismeril Messages postés 19032 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 28 avril 2024 931
10 févr. 2015 à 14:57
Bonjour Dal, je pense que tu as bien traduit ma proposition emprunte d'orientation objet ;-)

--
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
10 févr. 2015 à 15:19
Dal <-- content :-D
0
FFran6 Messages postés 13 Date d'inscription lundi 9 février 2015 Statut Membre Dernière intervention 11 février 2015
10 févr. 2015 à 19:25
A mon avis il faut taper dans la notion de récursivité:
Entrer dans une fonction avec deux parametres, le numero de la question et celui de la reponse choisie et traiter en conséquence jusqu'a epuisement des questions.
Regarde la doc concernant la réentrance ou la récursivité en C
0