Problème programmation C
shiomi
Messages postés
68
Date d'inscription
Statut
Membre
Dernière intervention
-
tech_57 -
tech_57 -
Bonjour,
J'ai un problème concernant la création d'un menu en langage C à choix multiples sous le logiciel codeblocks.
Voici ci-dessous mon programme :
/******************************************************************************
* AfficherMenu.c
* Affiche un menu donnant le choix entre :
* - Saisir les valeurs des 6 éléments du tableau
* - Affiche les valeurs contenues dans le tableau
* - Affiche la plus grande valeur du tableau
* - Modifie l'une des valeurs du tableau
******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
void saisieTab(int[],int);
void afficheTab(int[],int);
int maxTab(int[],int);
void videStdin(void);
void maFonctionDefaut(char);
int main()
{
int tab [6];
int valeur;
int taille=6;
char choix;
do
{
printf ("*****MENU*****\n");
printf ("Diverses manipulations proposees a l'utilisateur par l intermediaire d un menu\n");
printf ("\nFaites votre choix parmi ce qui est proposer\n\n\n");
printf ("\nChoisir 'a' pour saisir des valeurs des 6 elements du tableau\n");
printf ("\nChoisir 'b' pour afficher des valeurs contenues dans le tableau\n");
printf ("\nChoisir 'c' pour afficher le maximum des valeurs dans le tableau\n");
scanf ("%c",&choix);
choix=getchar();
switch (choix)
{
case 'a':
saisieTab(tab,taille);
break;
case 'b':
afficheTab(tab,taille);
break;
case 'c':
maxTab(tab,taille);
valeur=maxTab(tab,taille);
break;
case 'q':
maFonctionDefaut(choix);
break;
choix=getchar();
}
}while (choix!='q');
return (0);
}
/*******************************************************************
* NOM : saisieTab
* ENTREES :Le tableau d'entiers et sa taille ( entier )
* RENVOI : ------
* DESCRIPTION : Saisie des valeurs des 6 éléments du tableau
*******************************************************************/
void saisieTab(int tab[],int taille)
{
int i;
for (i=0;i<taille;i++)
{
printf ("Entrez la valeur de la case %d :",i+1);
scanf ("%d",&tab[i]);
}
}
/*******************************************************************
* NOM : afficheTab
* ENTREES : Le tableau d'entiers et sa taille ( entier )
* RENVOI : ------
* DESCRIPTION : Affiche des valeurs contenues dans le tableau
*******************************************************************/
void afficheTab(int tab[],int taille)
{
int i;
for (i=0;i<taille;i++)
{
printf ("%d",tab[i]);
}
}
/*******************************************************************
* NOM : maxTab
* ENTREES : Le tableau d'entiers et sa taille
* RENVOI : maxTab
* DESCRIPTION : Affiche la valeur maximum du tableau
*******************************************************************/
int maxTab(int tab[],int taille)
{
int max,i;
max=tab[0];
for (i=0;i<taille;i++)
{
if (max<tab[i])
{
max=tab[i];
}
printf ("La valeur maximum du tableau est : %d",max);
}
return (0);
}
/*******************************************************************
* VIDESTDIN
*******************************************************************/
void videStdin(void)
{
int c;
do
{
c = getchar();
} while (c != '\n' && c != EOF);
}
/**********************************************************************
* DEFAUT
**********************************************************************/
void maFonctionDefaut(char q)
{
if (getchar!='a','b','c')
{
printf ("Choix incorrect !!! Veuillez choisir a, b ou c");
}
}
Mon problème est que quand je lance mon programme sous codeblocks, le menu s'affiche et quand je tape au clavier mon choix, le programme ne m'affiche pas le choix que j'ai sélectionner mais il me ré-affiche le menu et ça continuellement.
Quelqu'un aurait il la solution afin d'exécuter mon menu correctement ?
Merci
J'ai un problème concernant la création d'un menu en langage C à choix multiples sous le logiciel codeblocks.
Voici ci-dessous mon programme :
/******************************************************************************
* AfficherMenu.c
* Affiche un menu donnant le choix entre :
* - Saisir les valeurs des 6 éléments du tableau
* - Affiche les valeurs contenues dans le tableau
* - Affiche la plus grande valeur du tableau
* - Modifie l'une des valeurs du tableau
******************************************************************************/
#include <stdio.h>
#include <stdlib.h>
void saisieTab(int[],int);
void afficheTab(int[],int);
int maxTab(int[],int);
void videStdin(void);
void maFonctionDefaut(char);
int main()
{
int tab [6];
int valeur;
int taille=6;
char choix;
do
{
printf ("*****MENU*****\n");
printf ("Diverses manipulations proposees a l'utilisateur par l intermediaire d un menu\n");
printf ("\nFaites votre choix parmi ce qui est proposer\n\n\n");
printf ("\nChoisir 'a' pour saisir des valeurs des 6 elements du tableau\n");
printf ("\nChoisir 'b' pour afficher des valeurs contenues dans le tableau\n");
printf ("\nChoisir 'c' pour afficher le maximum des valeurs dans le tableau\n");
scanf ("%c",&choix);
choix=getchar();
switch (choix)
{
case 'a':
saisieTab(tab,taille);
break;
case 'b':
afficheTab(tab,taille);
break;
case 'c':
maxTab(tab,taille);
valeur=maxTab(tab,taille);
break;
case 'q':
maFonctionDefaut(choix);
break;
choix=getchar();
}
}while (choix!='q');
return (0);
}
/*******************************************************************
* NOM : saisieTab
* ENTREES :Le tableau d'entiers et sa taille ( entier )
* RENVOI : ------
* DESCRIPTION : Saisie des valeurs des 6 éléments du tableau
*******************************************************************/
void saisieTab(int tab[],int taille)
{
int i;
for (i=0;i<taille;i++)
{
printf ("Entrez la valeur de la case %d :",i+1);
scanf ("%d",&tab[i]);
}
}
/*******************************************************************
* NOM : afficheTab
* ENTREES : Le tableau d'entiers et sa taille ( entier )
* RENVOI : ------
* DESCRIPTION : Affiche des valeurs contenues dans le tableau
*******************************************************************/
void afficheTab(int tab[],int taille)
{
int i;
for (i=0;i<taille;i++)
{
printf ("%d",tab[i]);
}
}
/*******************************************************************
* NOM : maxTab
* ENTREES : Le tableau d'entiers et sa taille
* RENVOI : maxTab
* DESCRIPTION : Affiche la valeur maximum du tableau
*******************************************************************/
int maxTab(int tab[],int taille)
{
int max,i;
max=tab[0];
for (i=0;i<taille;i++)
{
if (max<tab[i])
{
max=tab[i];
}
printf ("La valeur maximum du tableau est : %d",max);
}
return (0);
}
/*******************************************************************
* VIDESTDIN
*******************************************************************/
void videStdin(void)
{
int c;
do
{
c = getchar();
} while (c != '\n' && c != EOF);
}
/**********************************************************************
* DEFAUT
**********************************************************************/
void maFonctionDefaut(char q)
{
if (getchar!='a','b','c')
{
printf ("Choix incorrect !!! Veuillez choisir a, b ou c");
}
}
Mon problème est que quand je lance mon programme sous codeblocks, le menu s'affiche et quand je tape au clavier mon choix, le programme ne m'affiche pas le choix que j'ai sélectionner mais il me ré-affiche le menu et ça continuellement.
Quelqu'un aurait il la solution afin d'exécuter mon menu correctement ?
Merci
A voir également:
- Problème programmation C
- Application de programmation - Guide
- Programmation envoi sms - Guide
- Programmation vb - Télécharger - Langages
- Programmation binaire - Guide
- Problème de programmation digicode extel klavy 3 - Forum Audio
3 réponses
Je n'ai pas essayé le programme, mais une première lecture me fait bondir sur quelques points:
- Un programme indenté serait bienl plus lisible; merci de penser aux correcteurs.
- break; choix=getchar(); La 2ème ligne n'a aucune chance d'ếtre exécutée,
- if (getchar!='a','b','c') Ce n'est pas franchement une erreur, mais le résultat ne sera certainement pas ce que tu attends; en effet le 'printf' sera toujours exécuté à cause du 'c' qui est toujours vrai.
- dans la fonction 'maxTab' i=1 est amplement suffisant.
- dans la fonction 'maxTab', la fonction 'printf' est mal placée.
- dans la fonction 'afficheTab', un printf ("%d ", tab[i]); permet de séparer les différentes valeurs.
Bonne correction.
- Un programme indenté serait bienl plus lisible; merci de penser aux correcteurs.
- break; choix=getchar(); La 2ème ligne n'a aucune chance d'ếtre exécutée,
- if (getchar!='a','b','c') Ce n'est pas franchement une erreur, mais le résultat ne sera certainement pas ce que tu attends; en effet le 'printf' sera toujours exécuté à cause du 'c' qui est toujours vrai.
- dans la fonction 'maxTab' i=1 est amplement suffisant.
- dans la fonction 'maxTab', la fonction 'printf' est mal placée.
- dans la fonction 'afficheTab', un printf ("%d ", tab[i]); permet de séparer les différentes valeurs.
Bonne correction.
Salut,
J'ai trouvé plusieurs erreurs dans la boucle do ... while
voici ma correction
do
{
printf ("*****MENU*****\n");
printf ("Diverses manipulations proposees a l'utilisateur par l intermediaire d un menu\n");
printf ("\nFaites votre choix parmi ce qui est proposer\n\n\n");
printf ("\nChoisir 'a' pour saisir des valeurs des 6 elements du tableau\n");
printf ("\nChoisir 'b' pour afficher des valeurs contenues dans le tableau\n");
printf ("\nChoisir 'c' pour afficher le maximum des valeurs dans le tableau\n");
//scanf ("%c",&choix);
choix=getchar();
switch (choix)
{
case 'a':
saisieTab(tab,taille);
break;
case 'b':
afficheTab(tab,taille);
break;
case 'c':
maxTab(tab,taille);
valeur=maxTab(tab,taille);
break;
case 'q':
break;
default : maFonctionDefaut(choix);
}
}while (choix!='q');
A+.
J'ai trouvé plusieurs erreurs dans la boucle do ... while
voici ma correction
do
{
printf ("*****MENU*****\n");
printf ("Diverses manipulations proposees a l'utilisateur par l intermediaire d un menu\n");
printf ("\nFaites votre choix parmi ce qui est proposer\n\n\n");
printf ("\nChoisir 'a' pour saisir des valeurs des 6 elements du tableau\n");
printf ("\nChoisir 'b' pour afficher des valeurs contenues dans le tableau\n");
printf ("\nChoisir 'c' pour afficher le maximum des valeurs dans le tableau\n");
//scanf ("%c",&choix);
choix=getchar();
switch (choix)
{
case 'a':
saisieTab(tab,taille);
break;
case 'b':
afficheTab(tab,taille);
break;
case 'c':
maxTab(tab,taille);
valeur=maxTab(tab,taille);
break;
case 'q':
break;
default : maFonctionDefaut(choix);
}
}while (choix!='q');
A+.