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 :

menu en c++ probléme


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Juin 2010
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 151
    Points : 43
    Points
    43
    Par défaut menu en c++ probléme
    salut,je suis débutante en c++ et en programmation en général j'ai un programme qui comporte un menu que vous trouvez ci joint.le problème est que l'orsque je saisis un choix on ne peux plus saisir un autre.il faut relancer l'exécution pour pouvoir saisir un autre choix,je veux que mon programme puisse exécuter plusieurs choix l'un après l'autre,je ne sait pas comment?
    Images attachées Images attachées  

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    En mettant le menu dans une boucle !

    Sans avoir le code source de l'exemple, difficile d'en dire plus.

  3. #3
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Bonjour,

    actuellement que fait le programme une fois un choix saisi et exécuté ?

    en tout cas il suffit de mettre la saisie du choix et son exécution dans une boucle, et d'ajouter une nouvelle entrée "sortir" permettant de sortir de la boucle et de finir l'exécution du programme proprement et éventuellement de sauver l'image si cela n'est pas fait après chaque modification
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  4. #4
    Membre du Club
    Inscrit en
    Juin 2010
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 151
    Points : 43
    Points
    43
    Par défaut
    j'ai pas trop compris ce que je vais faire
    voila mon code si tu peux m'expliquer qu'est ce que j'ajoute
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    #include "CImg.h"
    #include <iostream> 
    #include<string.h>
    using namespace std; 
    #define cimg_use_jpeg
    #define cimg_use_png
    using namespace cimg_library;
    int main(){
    int choix,degré,x;
    char adresse[100],nouvel_adr[100],format[100],adr2[100];
    cout<<"********************Bibliothéque de traitement d'image ********************"<<endl;
    cout<<"1- affichage"<<endl;
    cout<<"2- rotation"<<endl;
    cout<<"3- zoom"<<endl;
    cout<<"4- conversion de format "<<endl;
    cout<<"5- mirror"<<endl;
    cout<<"6-rogner"<<endl;
    cout<<"Veuillez entrer votre choix:"<<endl;
    cin>>choix;
    switch(choix)
    {
    	//affichage de l'image
    case 1 :
    		{ cout<<"enter l'adresse de l'image à afficher"<<endl;
    		  cin>>adresse;
              CImg<double> image(adresse);
              CImgDisplay main_disp(image,"Image",0);
              main_disp.wait();
              break;
    		}
    //rotation de l'image
    case 2:
    		{ cout<<"enter l'adresse de l'image "<<endl;
    		  cin>>adresse;
    		  cout<<"entrer le degré de rotation souhaité"<<endl;
              cin>>degré;
              CImg<double> image(adresse);
              image.rotate(degré);
              image.display();
    		  cout<<"tapez 0 si vous souhaitez enregistrez l'image "<<endl;
    		  cin>>x;
    		  if (x==0)
    		  { 
    		  cout<<"enter l'adresse de l'emplacement souhaité"<<endl;
    		  cout<<nouvel_adr;
              image.save(nouvel_adr);
    		  }
             break;
    		}
    //zoom
    //case 3:{
     
     
     
     
     
    //	   break;
    //	   }
    //conversion de format
    case 4:{
         cout<<"enter l'adresse de l'image à convertir"<<endl;
         cin>>adresse;
    	 cout<<"entrer le format souhaité"<<endl;
         cin>>format;
    	 cout<<"entrer l'adresse souhaité"<<endl;
         cin>>adr2;
         CImg<double> image(adresse);
    	  if (strcmp(format,"bmp"))
    	  { image.save_bmp(adr2);}
    	  if (strcmp(format,"jpeg"))
          { image.save_jpeg(adr2);}
          if (strcmp(format,"png"))
          { image.save_png(adr2);}
         break;
    	  }
       //mirror
    case 5:{
    	 cout<<"enter l'adresse de l'image "<<endl;
         cin>>adresse;
         CImg<double> image(adresse);
    	 image.mirror('X');
    	 image.display();
    	  break;
    	   }
    default:cout<<"votre choix ne fait pas partie de la liste,veuillez consulter de nouveau nos choix"<<endl;
    }
    return 0;
    }
    si tu m'aide je serais reconaissante

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Je le fait simple mais voilà l'idée :

    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
    bool on_continue = true;
    while(on_continue == true)
    {
       // affiche menu
     
       // saisie caractère
     
       // traitement du caractere saisie
       switch(caractere)
       {
          ...
     
          case 'Q' : // traitement de l'option quitter
             on_continue = false;
             break;
       }
    }
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  6. #6
    Membre du Club
    Inscrit en
    Juin 2010
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 151
    Points : 43
    Points
    43
    Par défaut probléme de menu
    salut,j'ai fait comme vous m'avez dit mais sa ne marche pas encore
    voila comment j'ai fait peut être que je me suis trompée
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    #include "CImg.h"
    #include <iostream> 
    #include<string.h>
    using namespace std; 
    #define cimg_use_jpeg
    #define cimg_use_png
    using namespace cimg_library;
    int main(){
    int choix,degré,x;
    bool on_continue = true;
    char adresse[100],nouvel_adr[100],format[100],adr2[100];
    while(on_continue == true)
    {
    cout<<"********************Bibliothéque de traitement d'image ********************\n\n"<<endl;
    cout<<"1- affichage\n"<<endl;
    cout<<"2- rotation\n"<<endl;
    cout<<"3- zoom\n"<<endl;
    cout<<"4- conversion de format \n"<<endl;
    cout<<"5- mirror\n"<<endl;
    cout<<"6- rogner\n"<<endl;
    cout<<"7- quitter\n"<<endl;
    cout<<"Veuillez entrer votre choix:\n"<<endl;
    cin>>choix;
     
    switch(choix)
    {
    	//affichage de l'image
    case 1 :
    		{ cout<<"enter l'adresse de l'image à afficher"<<endl;
    		  cin>>adresse;
              CImg<double> image(adresse);
              image.display();
              break;
    		}
    //rotation de l'image
    case 2:
    		{ cout<<"enter l'adresse de l'image "<<endl;
    		  cin>>adresse;
    		  cout<<"entrer le degré de rotation souhaité"<<endl;
              cin>>degré;
              CImg<double> image(adresse);
              image.rotate(degré);
              image.display();
    		  cout<<"tapez 0 si vous souhaitez enregistrez l'image "<<endl;
    		  cin>>x;
    		  if (x==0)
    		  { 
    		  cout<<"enter l'adresse de l'emplacement souhaité"<<endl;
    		  cout<<nouvel_adr;
              image.save(nouvel_adr);
    		  }
             break;
    		}
    //zoom
    //case 3:{
     
     
     
     
     
    //	   break;
    //	   }
    //conversion de format
    case 4:{
         cout<<"enter l'adresse de l'image à convertir"<<endl;
         cin>>adresse;
    	 cout<<"entrer le format souhaité"<<endl;
         cin>>format;
    	 cout<<"entrer l'adresse souhaité"<<endl;
         cin>>adr2;
         CImg<double> image(adresse);
    	  if (strcmp(format,"bmp"))
    	  { image.save_bmp(adr2);}
    	  if (strcmp(format,"jpeg"))
          { image.save_jpeg(adr2);}
          if (strcmp(format,"png"))
          { image.save_png(adr2);}
         break;
    	  }
       //mirror
    case 5:{
    	 cout<<"enter l'adresse de l'image "<<endl;
         cin>>adresse;
         CImg<double> image(adresse);
    	 image.mirror('X');
    	 image.display();
    	  break;
    }
    //rogner
    case 6:{
         cout<<"enter l'adresse de l'image "<<endl;
         cin>>adresse;
         CImg<double> image(adresse);
    	 image.dispz(500,500,"zoomed image",0);
    	// image.display();
     
    	  break;
    	   }
     
    case 7:{
    	  exit(0);
          on_continue = false;
          break;
    	   }
    default:cout<<"votre choix ne fait pas partie de la liste,veuillez consulter de nouveau nos choix"<<endl;
    }
    return 0;
    }
    }
    alors?

  7. #7
    Membre du Club
    Inscrit en
    Juin 2010
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 151
    Points : 43
    Points
    43
    Par défaut RE code du programme
    Citation Envoyé par gl Voir le message
    En mettant le menu dans une boucle !

    Sans avoir le code source de l'exemple, difficile d'en dire plus.
    salut j'ai mis le code alors vous pouvez m'aidez

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Pour rechercher une faute, soit on met un code très limité, soit on met des impressions intermédiaires, ce qui permet de limiter la recherche.
    Là il y a un grand code, on ne voit pas bien les décalages, et vous ne dites pas ce qui se passe, alors, on ne sait pas quoi répondre.
    Cordialement.

  9. #9
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    effectivement, qu'est-ce qui ne marche pas ?

    en tout cas cela va forcément boucler à moins qu'il n'y ai un exit caché quelque part dans les fonctions appelées

    par contre, à partir du moment ou dans le cas 7 vous faites un exit le booléen on_continue ne sert strictement à rien, retirez donc la gestion e la variable et remplace le while par un for
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  10. #10
    Membre du Club
    Inscrit en
    Juin 2010
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 151
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    Bonjour,
    Pour rechercher une faute, soit on met un code très limité, soit on met des impressions intermédiaires, ce qui permet de limiter la recherche.
    Là il y a un grand code, on ne voit pas bien les décalages, et vous ne dites pas ce qui se passe, alors, on ne sait pas quoi répondre.
    Cordialement.
    lors de l'exécution je tape un choix ,il est traité puis on ne peut plus saisir d'autre choix la fenêtre de l'exécution se ferme c'est ce qui se passe au juste.j'ai fait une boucle comme vous le voyez dans le code mais sa donne la meme chose

  11. #11
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    juste comme ca, vous êtes sure d'avoir recompiler la chose et d'exécuter la nouvelle version ?
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  12. #12
    Membre du Club
    Inscrit en
    Juin 2010
    Messages
    151
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 151
    Points : 43
    Points
    43
    Par défaut
    Citation Envoyé par bruno_pages Voir le message
    juste comme ca, vous êtes sure d'avoir recompiler la chose et d'exécuter la nouvelle version ?
    oui je suis certaine d'avoir recompilé.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Alors, mettez des impressions intermédiaires, par exemple
    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
    bool on_continue = true;
    cout<<"Début du programme"<<endl;
    int choix = 0;
    while(on_continue == true)
    {
       // affiche menu
    // cout<<"Début du programme"<<endl; cette ligne s'imprimerait indéfiniment
     
       // saisie caractère
    cin>>carctere;
       if (caractere != 0)
      {
       cout<<"Caractère ou numéro frappé "<<caractère<<endl; 
       // traitement du caractere saisie
       switch(caractere)
         {
          ...
     
            case 'Q' : // traitement de l'option quitter
               cout<<"traitement de la case Q"<<endl; 
               on_continue = false;
               break;
         }
       cout<<"Fin du switch "<<endl; 
       caractere =0;
      }
    }
    J'ai repris le code de Ram-0000

    Il y a une autre solution pour comprendre ce qui se passe, c'est de faire un organigramme.

    PS, naturellement à la place de choix, il fallait lire cractere

  14. #14
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    Citation Envoyé par Pierre Dolez Voir le message
    Alors, mettez des impressions intermédiaires
    le plus simple est encore d'exécuter la chose sous debugger ... d'ailleurs c'est pour cela qu'ils existent
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  15. #15
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par maissaab Voir le message
    salut j'ai mis le code alors vous pouvez m'aidez
    Avec le return 0; en dehors de la boucle cela devrait mieux fonctionner. Avec le code actuel, quelque soit le choix, l'itération se termine par un return 0; qui naturellement sort du programme donc de la boucle (et ici, puisqu'on est dans le main(), met fin au programme).
    En intendant proprement le code, cette erreur aurait sauté aux yeux.

    Au passage, puisque c'est du C++, pourquoi utiliser des chaînes C-style et non des std::string ?

  16. #16
    Invité
    Invité(e)
    Par défaut
    Bonjour Bruno Pages,
    Connaissez-vous une solution pour récupérer un caractère sans faire <Entrée>?
    C'est à dire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    while (!kbhit());
    int c=getch();
    switch (c)
    {
    ...
    }
    Moi, j'ai pas trouvé.

  17. #17
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  18. #18
    Invité
    Invité(e)
    Par défaut
    Donc, il n'y a pas de solution ni avec cette méthode (kbhit() et getch()) qui marchait très bien sous DOS ni avec une autre. De mémoire je n'ai pas réussi à l'appliquer sous UNIX. Et, rien à faire non plus sous Windows.
    Dans le cadre du sujet mis en lien, j'avais cherché des tas de solutions, y compris des redirections de stdin etc.
    Cordialement.

  19. #19
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    reste la possibilité d'utiliser une lib graphique et de réagir à un événement key down
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  20. #20
    Invité
    Invité(e)
    Par défaut
    Oui,merci, c'est naturellement la solution que j'ai adoptée quand le suis passé de DOS à Windows.
    Mais étant donné que la question avait été posée, je voulais savoir si on avait trouvé une solution.
    Cordialement.

Discussions similaires

  1. Menu simple as3 - problème curseur
    Par jimmigwell dans le forum ActionScript 3
    Réponses: 0
    Dernier message: 01/05/2014, 18h24
  2. [Beta4] Menu couches et problème de Zoom
    Par luigifab dans le forum IGN API Géoportail
    Réponses: 6
    Dernier message: 05/03/2010, 15h14
  3. Menu CSS vertical, problème au troisième niveau du menu
    Par mouna201 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 06/11/2008, 23h09
  4. Menu en css ( problème de "survollage")
    Par Gnutella dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 21/04/2008, 13h14
  5. ContextMenu de l'explorer: Problème de sous menu
    Par Ingham dans le forum Composants VCL
    Réponses: 8
    Dernier message: 26/02/2004, 08h06

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