Problème de programmation
grongnet
-
cgrongnet -
cgrongnet -
Bonjour,
Voilà le petit bout de programme suivant affiche toujours un fois de trop le menu, je l'ai débarrassé du superflu. Quelqu'un aurait-il une idée ? Merci beaucoup:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include <unistd.h>
int GESTION();
int DIALOGUE(int);
int ACQUISITION(int);
int CONSULTATION(int);
int HEURISTIQUE(int);
int INTERACTION(int);
int AfficheMenu();
/* Variable globale teste les menus disponibles */
int gTabMenu[5];
int gAppelMenu;
int main(int argc, char** argv)
{
AfficheMenu();
if(GESTION() != 0)
{puts("PROGRAMME INDISPONIBLE"); return 0;}
return EXIT_SUCCESS;
}
int GESTION()
{
/* Cette procédure va permettre de profiler ce qui sera proposé au menu */
/* et ensuite dans les sous menus */
gAppelMenu = 0;
//ACQUISITION(gAppelMenu);
return 0;
}
int AfficheMenu()
{
/*On vérifie d'abord ce que peut proposer le programme afin*/
/*d'afficher un Menu réaliste. Par exemple lire le source
DIALOGUE(gAppelMenu);
ACQUISITION(gAppelMenu);
CONSULTATION(gAppelMenu);
HEURISTIQUE(gAppelMenu);
INTERACTION(gAppelMenu);*/
/****************************************************
* MenuGénéral
****************************************************/
char c;
do
{
puts(" ==========================================================================");
puts("\t\n GrpMLPCG-2009");
puts("\t\t\t\t ROBOTLING\n\n\n");
puts("\t\t\t(Activités possibles)\n\n");
if(gTabMenu[2]==0)
puts("\t\t\t-1)- DIALOGUE ");
if(gTabMenu[0]==0)
puts("\t\t\t-2)- ACQUISITION");
if(gTabMenu[3]==0)
puts("\t\t\t-3)- HEURISTIQUE");
if(gTabMenu[1]==0)
puts("\t\t\t-4)- CONSULTATION");
if(gTabMenu[4]==0)
puts("\t\t\t-5)- INTERACTION");
puts("\t\t\t-Q)- QUITTER");
switch (c)
{
case '1':
DIALOGUE(gAppelMenu);break;
case '2':
ACQUISITION(gAppelMenu);break;
case '3':
HEURISTIQUE(gAppelMenu);break;
case '4':
CONSULTATION(gAppelMenu);break;
case '5':
INTERACTION(gAppelMenu);break;
case 'Q':break;
default:
sleep(2);break;
}
}while((c=toupper(getchar()))!='Q' );
return 0;
}
int ACQUISITION(gAppelMenu)
{
/****************************************************
* MenuAcquisition
****************************************************/
if(gAppelMenu != 0)
gTabMenu[0]=0;
puts("DANS ACQUISITION");
return 0;
}
int CONSULTATION(gAppelMenu)
{
/****************************************************
* MenuConsultation
****************************************************/
gTabMenu[1]=0;
return 0;
}
int DIALOGUE(gAppelMenu)
{
/****************************************************
* MenuDialogue
****************************************************/
gTabMenu[2]=0;
return 0;
}
int HEURISTIQUE(gAppelMenu)
{
/****************************************************
* MenuHeuristique
****************************************************/
gTabMenu[3]=0;
return 0;
}
int INTERACTION(gAppelMenu)
{
/****************************************************
* MenuInteraction
****************************************************/
gTabMenu[4]=0;
return 0;
}
Voilà le petit bout de programme suivant affiche toujours un fois de trop le menu, je l'ai débarrassé du superflu. Quelqu'un aurait-il une idée ? Merci beaucoup:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#include <unistd.h>
int GESTION();
int DIALOGUE(int);
int ACQUISITION(int);
int CONSULTATION(int);
int HEURISTIQUE(int);
int INTERACTION(int);
int AfficheMenu();
/* Variable globale teste les menus disponibles */
int gTabMenu[5];
int gAppelMenu;
int main(int argc, char** argv)
{
AfficheMenu();
if(GESTION() != 0)
{puts("PROGRAMME INDISPONIBLE"); return 0;}
return EXIT_SUCCESS;
}
int GESTION()
{
/* Cette procédure va permettre de profiler ce qui sera proposé au menu */
/* et ensuite dans les sous menus */
gAppelMenu = 0;
//ACQUISITION(gAppelMenu);
return 0;
}
int AfficheMenu()
{
/*On vérifie d'abord ce que peut proposer le programme afin*/
/*d'afficher un Menu réaliste. Par exemple lire le source
DIALOGUE(gAppelMenu);
ACQUISITION(gAppelMenu);
CONSULTATION(gAppelMenu);
HEURISTIQUE(gAppelMenu);
INTERACTION(gAppelMenu);*/
/****************************************************
* MenuGénéral
****************************************************/
char c;
do
{
puts(" ==========================================================================");
puts("\t\n GrpMLPCG-2009");
puts("\t\t\t\t ROBOTLING\n\n\n");
puts("\t\t\t(Activités possibles)\n\n");
if(gTabMenu[2]==0)
puts("\t\t\t-1)- DIALOGUE ");
if(gTabMenu[0]==0)
puts("\t\t\t-2)- ACQUISITION");
if(gTabMenu[3]==0)
puts("\t\t\t-3)- HEURISTIQUE");
if(gTabMenu[1]==0)
puts("\t\t\t-4)- CONSULTATION");
if(gTabMenu[4]==0)
puts("\t\t\t-5)- INTERACTION");
puts("\t\t\t-Q)- QUITTER");
switch (c)
{
case '1':
DIALOGUE(gAppelMenu);break;
case '2':
ACQUISITION(gAppelMenu);break;
case '3':
HEURISTIQUE(gAppelMenu);break;
case '4':
CONSULTATION(gAppelMenu);break;
case '5':
INTERACTION(gAppelMenu);break;
case 'Q':break;
default:
sleep(2);break;
}
}while((c=toupper(getchar()))!='Q' );
return 0;
}
int ACQUISITION(gAppelMenu)
{
/****************************************************
* MenuAcquisition
****************************************************/
if(gAppelMenu != 0)
gTabMenu[0]=0;
puts("DANS ACQUISITION");
return 0;
}
int CONSULTATION(gAppelMenu)
{
/****************************************************
* MenuConsultation
****************************************************/
gTabMenu[1]=0;
return 0;
}
int DIALOGUE(gAppelMenu)
{
/****************************************************
* MenuDialogue
****************************************************/
gTabMenu[2]=0;
return 0;
}
int HEURISTIQUE(gAppelMenu)
{
/****************************************************
* MenuHeuristique
****************************************************/
gTabMenu[3]=0;
return 0;
}
int INTERACTION(gAppelMenu)
{
/****************************************************
* MenuInteraction
****************************************************/
gTabMenu[4]=0;
return 0;
}
A voir également:
- Problème de programmation
- Application de programmation - Guide
- Télécharger le programme de pmu - Télécharger - Médias et Actualité
- Fermer un programme de force - Guide
- Comment lancer un programme automatiquement au démarrage de windows - Guide
- Programmation casio vr-200 - Forum Autres périphériques et appareils
2 réponses
Bonjour,
C'est la fonction getchar() qui est en cause.
Quand tu appelles getchar(), le prog attends que tu entres un caractère suivi de 'Enter'.
Ce qui fait 2 caractères par exemple '1' et '\n', le menu est affiché une fois pour '1' et une autre fois pour '\n'.
solution: tester si le caractère est '\n' alors ne pas afficher le menu.
char c;
c='\0';
do
{
if (c!='\n') {
puts(" ==========================================================================");
puts("\t\n GrpMLPCG-2009");
puts("\t\t\t\t ROBOTLING\n\n\n");
puts("\t\t\t(Activités possibles)\n\n");
if(gTabMenu[2]==0)
puts("\t\t\t-1)- DIALOGUE ");
if(gTabMenu[0]==0)
puts("\t\t\t-2)- ACQUISITION");
if(gTabMenu[3]==0)
puts("\t\t\t-3)- HEURISTIQUE");
if(gTabMenu[1]==0)
puts("\t\t\t-4)- CONSULTATION");
if(gTabMenu[4]==0)
puts("\t\t\t-5)- INTERACTION");
puts("\t\t\t-Q)- QUITTER");
}
Salut.
C'est la fonction getchar() qui est en cause.
Quand tu appelles getchar(), le prog attends que tu entres un caractère suivi de 'Enter'.
Ce qui fait 2 caractères par exemple '1' et '\n', le menu est affiché une fois pour '1' et une autre fois pour '\n'.
solution: tester si le caractère est '\n' alors ne pas afficher le menu.
char c;
c='\0';
do
{
if (c!='\n') {
puts(" ==========================================================================");
puts("\t\n GrpMLPCG-2009");
puts("\t\t\t\t ROBOTLING\n\n\n");
puts("\t\t\t(Activités possibles)\n\n");
if(gTabMenu[2]==0)
puts("\t\t\t-1)- DIALOGUE ");
if(gTabMenu[0]==0)
puts("\t\t\t-2)- ACQUISITION");
if(gTabMenu[3]==0)
puts("\t\t\t-3)- HEURISTIQUE");
if(gTabMenu[1]==0)
puts("\t\t\t-4)- CONSULTATION");
if(gTabMenu[4]==0)
puts("\t\t\t-5)- INTERACTION");
puts("\t\t\t-Q)- QUITTER");
}
Salut.
bonjour, prière d'utiliser si possible les balises code pour les gros morceaux... (le bouton à droite de gras italique souligné)
je dois dire sinon que j'ai beaucoup de mal à comprendre votre code, ce que vous voulez faire / pensez faire. Cette histoire de tableau mis à zéro me trouble pas mal. Et sinon le tableau est utilisé avant sans être initialisé, ce qui est plutôt dangereux comme pratique...
je dois dire sinon que j'ai beaucoup de mal à comprendre votre code, ce que vous voulez faire / pensez faire. Cette histoire de tableau mis à zéro me trouble pas mal. Et sinon le tableau est utilisé avant sans être initialisé, ce qui est plutôt dangereux comme pratique...
Merci de ta réponse, j'ai effectivement adopté une solution du même type, sympa de ta part !