Problème programmation C

Fermé
shiomi Messages postés 68 Date d'inscription mercredi 7 octobre 2009 Statut Membre Dernière intervention 20 octobre 2009 - 7 oct. 2009 à 21:17
 tech_57 - 7 oct. 2009 à 22:22
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

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.
0
shiomi Messages postés 68 Date d'inscription mercredi 7 octobre 2009 Statut Membre Dernière intervention 20 octobre 2009
7 oct. 2009 à 22:20
merci
0
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+.
0