Faire des menus ...

Contenu du snippet

Voici une fonction qui fait des menu en mode texte.
J'ai penser que ca peut etre utile aux nombreuses personnes qui s'amuse a faire des calculettes, ca peur etre plus convivial !
Et surtout moins embetant a programmer !

Source / Exemple :


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

// permet de rentrer un nombre entier
int InputInteger(void)
{
char buf[256];
if(gets(buf) == NULL)
  {
  // si il y a eu une erreur on retourne la valeur 0
  return 0;
  }
// convertir la chaine en un entier
// ATTENTION : on ne gere pas les depassements !
return atoi(buf);
}

//---------------------------------------------------------
// permet de rentrer un nombre entier entre deux valeurs
int InputIntegerBetween(int min,int max)
{
int number;

if(min > max)
  {
  // si on nous demande des choses impossibles on retourne 0
  return 0;
  }

// tant que l'on ne rentre pas un nombre compris
// dans l'intervalle [min;max]
do
  {
  number = InputInteger();
  }while((number < min) || (number > max));

return number;
}

//---------------------------------------------------------
// affiche plusieurs fois le meme charactere
void PrintCharALot(char c,int nb)
{
int i;

for(i=1;i<=nb;i++)
  {
  printf("%c",c);
  }
}

//---------------------------------------------------------
// affiche un menu avec un titre et plusieurs articles numerotes.
// on peut avoir n'importe quel nombre d'articles :
// donc on utilise les fonctions a nombres variables d'arguments !
int Menu(int nbItem,char *Title,...)
{
// liste de tous les articles
va_list   listItem;
// la longueur du titre
int       lenTitle;
// indice
int       i;
// la valeur choisie
int       val;

// on verifie qu'il y est bien des articles :
if(nbItem <= 0)
  {
  return 0;
  }

// on calcule la longeur du titre
lenTitle = strlen(Title);
// on affiche une ligne :
PrintCharALot('=',lenTitle + 4);
printf("\n");
// on affiche le titre :
printf(" %s : \n",Title);
// on re-affiche une ligne :
PrintCharALot('=',lenTitle + 4);
printf("\n");

// on initialise la liste :
va_start(listItem,Title);

// maintenant on affiche les articles:
for(i=1;i<=nbItem;i++)
  {
  // on affiche l'article
  printf("%d) %s\n",i,va_arg(listItem,char *));
  }

// on re-re-affiche une ligne :
PrintCharALot('=',lenTitle + 4);
printf("\n");

// on referme correctement la liste
va_end(listItem);

// on demande de rentrer une valeur :
val = InputIntegerBetween(1,nbItem);

// on re-re-re-affiche une ligne :
PrintCharALot('=',lenTitle + 4);
printf("\n");

return val;
}

//---------------------------------------------------------
int main(int argc,char **argv)
{
int iSelect;
do
  {
  iSelect = Menu( 
                  10,
                  "Voici le titre du menu",
                  "Quitter (taper 1 pour quitter !)",
                  "Ici est l'article 2",
                  "Vous pouvez remarquer que les 'traits'",
                  "sont en fonction de la longeur du titre",
                  "Nous voila donc a l'article 5",
                  "Je ne sais pas quoi mettre ici !",
                  "Le celebre 'Helle World'",
                  "Vive la programmation en C !",
                  "...",
                  "Ici le dernier article (enfin)"
                  );
  printf("Vous avez choisi l'article #%d\n",iSelect);
  }while(iSelect != 1);
return 0;
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.