IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Comment lire un choix de menu ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Par défaut Comment lire un choix de menu ?
    Bonjour, je voudrais laisser l'usager choisir un choix de menu entre 1 et 7 et afficher un message tant que le choix n'est pas bon et après avoir fait son choix ou si c'est un mauvais choix réafficher ce menu ensuite.

    Voici ce que j'ai tenté:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
         int choixMenuPrincipal = 0;
        string choixClavier;
        cout << choixClavier.capacity() << endl;
     
        while (choixMenuPrincipal != 7)
        {
           afficherMenuPrincipal();
     
           cin >> choixClavier;
     
           if (choixClavier.length() < 1)
              cout << "vous devez faire un choix." << endl;
     
           else if (choixClavier.length() != 1)
           {
     
              cout << " Faites un choix entre 1 et 7." << endl;
     
           } else cout << "vous avez entré un caractère" << endl;
     
       }
    Pour le moment j'essaie de déterminer si l'usager n'entre qu'un seul caractère pour pouvoir vérifier si ce caractère est bien entre 1 et 7 cela fonctionne mais je trouves bizarre que mon string.capacity() renvoit 0 quand il place l'entrée cin dans la string il réalloue la dimension de la string ?

    De plus quand j'appuie admettons sur ctrl-z il tourne en boucle et ne s'occupe plus de cin alors le menu se ré-affiche indéfiniment en défilant l'écran.

    Merci


  2. #2
    Membre éclairé Avatar de kohsaka
    Homme Profil pro
    Intégrateur HTML / Developpeur .NET
    Inscrit en
    Janvier 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur HTML / Developpeur .NET

    Informations forums :
    Inscription : Janvier 2007
    Messages : 383
    Par défaut
    voila ce que je peux te proposer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    do // faire
    	{
    	    menu(); // procedure affichant le menu
    	    cout<<"veuillez choisir une option :"<<endl;
    	    cin>>choix;
    	    cin.ignore(1,'\n'); //si tu utilises getline() dans ton code par la suite
    	    switch(choix)
    	    {
    		case 1 :     //traitement
    				break;
    		case 2 :     //traitement
    				break;
    		case 3 :     //traitement  
    				break;
    		default :    if(choix==0)
    				{
    				     cout<<"fin du programme"<<endl;
    				}
    				else
    				{
    	                             cout<<"veuillez choisir parmi les choix proposés"<<endl;
    				}
    				break;
    	    }
    	}
    	while(choix!=0); // tant que choix est different de 0
    	return 0;
    }
    desole pour l'indentation, j'arrive pas a avopir quelque chose de correcte sur le fofo

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    309
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 309
    Par défaut
    Ok je vais essayer cela merci

    Mais que fait cin.ignore(1,'\n'); au juste ?

    De plus pour ce qui est du string quand on y fait un cin il realloue de l'espace pour la string ?

  4. #4
    Membre éclairé Avatar de kohsaka
    Homme Profil pro
    Intégrateur HTML / Developpeur .NET
    Inscrit en
    Janvier 2007
    Messages
    383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur HTML / Developpeur .NET

    Informations forums :
    Inscription : Janvier 2007
    Messages : 383
    Par défaut
    heu dans la partie de code que je t'ai donné, le choix est un entier, je ne sais pas ce que ca donne avec un string, j'ai pas testé.

    concretement quand tu veux pouvoir gerer des chaines de caracteres avec des espaces, tu va utiliser getline(cin,nomvar)
    mais ca va poser un probleme par la suite si tu utilises des cin ailleur dans ton code, il faut donc que tu vides la memoire tampon.
    je ne saurais pas etre plus precis, ca fait un moment que j'ai fait ce cours, mais ce qui est certain, c'est qu'a chaque fois que tu utilisera cin, il faudra le mettre.

  5. #5
    Membre confirmé Avatar de amine6441
    Inscrit en
    Novembre 2006
    Messages
    85
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 85
    Par défaut
    voici un example du program que tu veux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #include<stdio.h>
    #include<conio.h>
     
    int test()          {
    int rep,k;
    do{
    printf("entrer votre choix");
    rep =getchar();
    k=rep;
    }
    while(rep!=1&&rep!=2&&rep!=3&&rep!=4&&rep!=5&&rep!=6&&rep!=7);
    return k;
    }
    void afficher(){
    printf("[1].......................\n");
    printf("[2].......................\n");
    printf("[3]......................\n");
    printf("[4]......................\n");
    printf("[5].......................\n");
    printf("[6]......................\n");
    printf("[7]......................\n");
    }
    void main(){
    int k;
    clrscr();
    afficher();
    k=test();
    printf("%d",k);
    switch(k){
    	case 1: printf("vous avez sesi 1");
    	break;
    	case 2: printf("vous avez sesi 2");
    	break;
    	case 3: printf("vous avez sesi 3");
    	break;
    	case 4: printf("vous avez sesi 4");
    	break;
    	case 5: printf("vous avez sesi 5");
    	break;
    	case 6: printf("vous avez sesi 6");
    	break;
    	case 7: printf("vous avez sesi 7");
    	break;
    	   //vous aurez pas besoin de default ici
    	   }
     getch();
    	   }
    et merci pour la participation

  6. #6
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Faq.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

Discussions similaires

  1. Comment lire un "name" d'un menu déroulant ?
    Par jlb59 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/06/2007, 14h11
  2. [Debutant] Comment lire la taille d'un fichier binaire ?
    Par Invité dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/12/2003, 19h20
  3. Comment créer des barres de Menu ?
    Par MoKo dans le forum IHM
    Réponses: 5
    Dernier message: 30/07/2003, 14h58
  4. Réponses: 2
    Dernier message: 06/12/2002, 07h50
  5. Réponses: 5
    Dernier message: 20/08/2002, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo