Tom's Guide > Forum > Programmation > Pourrais-je avoir une réponse svp ?

Pourrais-je avoir une réponse svp ?

Forum Programmation : Pourrais-je avoir une réponse svp ?

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

Bonjour à tous.

Un des algorithmes que je dois réaliser, se décompose en deux sous-programmes distincts.

L'idéal (afin d'avoir peut-être plus de points :-D) serait de ramener ce découpage à un menu qui laisserait l'utilisateur décider de ce qu'il veut faire...

Peut-on m'aider à réaliser ce menu car je n'ai aucune idée de comment faire cela ?!

Merci !

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Citation :

Un des algorithmes que je dois réaliser, se décompose en deux sous-programmes distincts.


Qu'est ce que tu appelle par "sous programmes distincts"? Deux programmes .exe différents, ou un seul programme mais avec un code en plusieurs parties distinctes?

Pour faire simple, tu peux faire un menu en mode console... Sinon, met toi à GTK ou une autre bibliothèque de ce genre...


pour un menu en mode console, voila un exemple:

Code :
  1. void menu(char *pchoixmenu)
  2. {
  3.   /*menu du départ, sur le xterm*/
  4.   system("clear" );//instruction a la console: executer "clear"
  5.   printf("Snake v1.0 by Rakipu\n" );
  6.   printf("-----------------------------\n\n\n" );
  7.   printf("Entrez votre choix:\n\n" );
  8.   printf("\n\n" );
  9.   printf("1:Jouer au jeu\n" );
  10.   printf("2:Instructions\n" );
  11.   printf("0:quitter\n" );
  12.   scanf("%c",pchoixmenu);
  13.   if((*pchoixmenu != '0')&&(*pchoixmenu != '1')&&(*pchoixmenu != '2'))
  14.     {
  15.       menu(pchoixmenu);
  16.     }
  17. }


Et donc selon le choix tu envoie l'utilisateur sur une autre partie du code (ou sur un autre programme.)

Répondre à Rakipu

Salut !

Alors, c'est un seul programme mais avec un code en plusieurs parties distinctes.

Je comprend ton code sauf à quoi mène :
menu(pchoixmenu); ??

Comment je divise mon code ?

Sinon, le menu console, répond exactement à ma question.

Merci.

Répondre à damboy

Citation :


Je comprend ton code sauf à quoi mène :
menu(pchoixmenu); ??



Avec menu(pchoixmenu); je fais une fonction récursive... Donc la fonction se rappelle elle même (dans ce cas précis c'est pas très propre, mais bon...)
Enfin te sens pas obligé de faire comme ca, une boucle c'est très bien...

Citation :


Comment je divise mon code ?


Eh bien, tu peux faire des fonctions et les appeler ensuite, ou bien si tu met tout dans la fonction main(pas conseillé) sépare avec des if...
Dans mon exemple, mon code de la fonction main se faisait comme ceci:

Code :
  1. while(choixmenu  !='0' ) /*tant qu'on ne quitte pas*/
  2.     {
  3.    
  4.       menu(&choixmenu); /*appel de la fonction menu*/
  5.       if(choixmenu=='2')
  6.     {
  7.       Instructions(&choixmenu);/*fonction qui m'affichera les instructions...*/
  8.     }
  9.       if(choixmenu=='1')
  10.     {
  11.   /*ici, le reste du jeu*/
  12.         }

Répondre à Rakipu

J'ai plusieurs problèmes venant du main...

Voici mon code :

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

void bjr()
{
printf("Bonjour\n" );
}

void bye()
{
printf("Au revoir\n" );
}

void quitter()
{
exit(0);
}

void menu(char *pchoixmenu)
{
system("clear" );//instruction a la console: executer "clear"
printf("Menu\n" );
printf("----\n\n\n" );
printf("Entrez votre choix:\n\n" );
printf("\n\n" );
printf("1:Dire bonjour\n" );
printf("2:Dire au revoir\n" );
printf("0:quitter\n" );
scanf("%c",pchoixmenu);
if((*pchoixmenu != '0')&&(*pchoixmenu != '1')&&(*pchoixmenu != '2'))
{
menu(pchoixmenu);
}
else if(*pchoixmenu == '1') bjr();
else if(*pchoixmenu == '2') bye();
else if(*pchoixmenu == '0') quitter();
}

void main()
{
char *pchoixmenu;

menu(&pchoixmenu);
}

Répondre à damboy

Nos messages se sont intervertis mais je t'ai mis le code de mon petit prog (ici plus bas) que j'arriv pas à faire tourner à casue du main (qua je ne sais pas comment définir)

Merci !

Répondre à damboy

Salut juste pour la forme je trouve que tu devrais remplacer ton if else if par un switch c'est plus propre a lire Mais (car il y a toujours un mais).

Sinon post les messages d erreurs qu'il t envoi si tu veux de l aide!

Répondre à showie
- 0 +

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. void bjr()
  4. {
  5.   printf("Bonjour\n" );
  6. }
  7. void bye()
  8. {
  9.   printf("Au revoir\n" );
  10. }
  11. void quitter()
  12. {
  13.   exit(0);
  14. }
  15. int menu(char pchoixmenu)
  16. {
  17.   int r = 0;
  18.   system("clear" );//instruction a la console: executer "clear"
  19.   printf("Menu\n" );
  20.   printf("----\n" );
  21.   printf("Entrez votre choix:\n\n" );
  22.   printf("\n\n" );
  23.   printf("1:Dire bonjour\n" );
  24.   printf("2:Dire au revoir\n" );
  25.   printf("0:quitter\n" );
  26.   scanf("%c",&pchoixmenu);
  27.   if(pchoixmenu == '1') bjr();
  28.   else if(pchoixmenu == '2') bye();
  29.   else if(pchoixmenu == '0') quitter();
  30.   else r = 1;
  31.   return r;
  32. }
  33. int main()
  34. {
  35.   char pchoixmenu;
  36.   while(menu(pchoixmenu));
  37.   return 0;
  38. }



Teste et approuve sous gcc 4.0.2.
Tain, ca fait du bien de faire des trucs aussi simples entre deux seances de debug C++ :)

Répondre à foch

Ca ne marche toujours pas !

Voici mes erreurs :

Linking menu.exe
Linker Warning: No module definition file specified: using defaults
Linking Error: Undefined symbol_system in module MENU.CPP

Je ne vois pas non plus le rôle du "char" vu que l'utilisateur devra rentrer 0,1 ou 2 et aussi le "while(menu(pchoixmenu))" pendant que quoi ? quant est-ce qu'elle s'arrête cette boucle ?

Merci !

Répondre à damboy
- 0 +

le "while(menu(pchoixmenu));"
c'est juste pour faire complique, en fait c'est
while( menu(pchoixmenu) == 1 );
ca revient au meme

et regarde dans le code, on retourne 1 seulement si on a rentre un numero non valide

Et puis, 0,1,2, que tu le veuille ou non, c'est des entiers, mais aussi et surtout dans le cas d'une saisie clavier, des caracteres.

Et pour ton probleme de compilation, desole, avec gcc sous linux ca marche au poil !

Répondre à foch

Je te remercie !

Peux-tu néanmoins regarder cette autre alternative de solution (vu que j'utilise Windows) qui marche très bien, et m'expliquer à quoi servent "getche" et "break"...Merci !

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

void bjr()
{
printf("\nBonjour\n" );
}

void bye()
{
printf("\nAu revoir\n" );
}

void end()
{
exit(0);
}

main()
{
int sel;

do
{
printf("\t1 = Dire bonjour\n" );
printf("\t2 = Dire au revoir\n" );
printf("\t0 = Fin\n\n" );
printf("\tVotre choix : " );
sel=getche();
switch(sel)
{
case '1': bjr();
printf("\nRetour au menu par une touche qcq" );
getche();
break;
case '2' : bye();
printf("\nRetour au menu par une touche qcq" );
getche();
break;
case '0' : end();
printf("\nRetour au menu par une touche qcq" );
getche();
break;
default : printf("\n\nSaisie erronée\n" );
printf("\nRetour au menu par une touche qcq" );
getche();
break;
}
printf("\n\n" );
} while(sel != '0');
}

[EDIT] Je viens de trouver la solution à mes problèmes !! C'est le "system(clear)" qui foirait et je m'en suis rendu compte en faisant mon autre prog avec le switch.
Il suffisait donc de mettre #include <conio.h> et clrscr() à la place de system(clear) !!
Vive l'informatique !!

Répondre à damboy

Si j'utilise 1,2,3 comme des caractères, c'est justement pour éviter un gros problème: dans une boucle, un scanf("%d" ) réagit très très mal si tu rentre n'importe quoi (du genre "sglkzn lskn" ), en fait ton programme planterait.

EDIT: moi c'était programmé sous linux, j'aurais ptet du te le dire... C'est pour cela que j'avais mis system("clear" ); plutôt que system("cls" ); ou autre...

Répondre à Rakipu

Ca m'a vraiment pris la tête mais c'est pas grave !
L'important c'est d'avoir des réponses ! :-D

Sinon pas de soucis non plus pour getche ou break donc plus de questions lol.

Au final, je me retrouve avec deux solutions c'est parfait merci !

Répondre à damboy
- 0 +

Programmer sous Windows.... quelle mauvaise idee :-D

Répondre à foch

Oui :-D (quoi que avec Gcc... c'est excusable)

Répondre à Rakipu

Salut tu vois finalement le switch t'a aidé ;)


bon je vois que je reviens ici trop tard tu as déja ta réponse mais bon l important c est que tu es une réponse!

Répondre à showie
Tom's Guide > Forum > Programmation > Pourrais-je avoir une réponse svp ?
Aller à :

Il y a 1091 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens