Partage
  • Partager sur Facebook
  • Partager sur Twitter

question sur le while?

    23 octobre 2008 à 12:11:15

    Bonjour,

    Je suis débutant en C alors désolé si mon probleme à l'air bête... :euh:

    j'ai codé ceci:

    int Menu_nbjoueur()
    {
    	int nbjoueur=0;
    
    	printf("Combien de joueur (1 ou 2)? ");
    	scanf_s("%d",&nbjoueur);
    
    	while (nbjoueur!=1 && nbjoueur!=2);
    	{
    		printf("Combien de joueur (1 ou 2)? ");
    		scanf_s("%d",&nbjoueur);
    	}
    	
    return nbjoueur;
    
    }
    


    Seulement lorsque je le lance il me demande bien une première fois "combien de joueur" et même si je tape 1 ou 2 dans la console, je rentre une fois dans la boucle (il me redemande donc) alors que je de devrais pas (enfin je ne veux pas y rentrer si nbjoueur==1 ou nbjoueur==2)
    • Partager sur Facebook
    • Partager sur Twitter
      23 octobre 2008 à 12:17:43

      Bonjour,

      while (nbjoueur!=1 && nbjoueur!=2);
      

      ; après le while == boucle infini, enlève le.

      scanf_s("%d",&nbjoueur);
      

      Pourquoi ne pas utiliser scanf ?


      De plus, une boule do{}while serait plus adapté ici.
      • Partager sur Facebook
      • Partager sur Twitter
        23 octobre 2008 à 12:33:50

        pour être plus précis dans ma demande et dans mon code je vous donne tout ce que j'ai inscris:

        int Menu_nbjoueur()
        {
        	int nbjoueur=0;
        
        	
        
        	do
        	{
        		printf("Combien de joueur (1 ou 2)? ");
        		scanf_s("%d",&nbjoueur);
        	}
        	while (nbjoueur!=1 && nbjoueur!=2);
        return nbjoueur;
        
        }
        
        int Menu_level()
        {
        	int level=0;
        	
        	do
        	{
        		printf("\n\nVous avez le choix entre:\n\n1-Easy\n2-Normal\n3-Hard");
        		printf("\n\nVotre choix? ");
        		scanf_s("%d",&level);
        	}
        	while (level!=1 && level!=2 && level!=3);
        
        return level;
        }
        
        int main (int argc, char *argv[])
        {
        	printf("**JEU DU CHIFFRE MYSTERE by MG**\n\n\n\n");
        
        	if (Menu_nbjoueur()==1 && Menu_level()==1)
        		printf("\n\nVotre choix est donc 1 joueur en mode Easy\n\nC'est parti!\n\n");
        
        	else if (Menu_nbjoueur()==1 && Menu_level()==2)
        		printf("\n\nVotre choix est donc 1 joueur en mode Normal\n\nC'est parti!\n\n");
        
        	else if (Menu_nbjoueur()==1 && Menu_level()==3)
        		printf("\n\nVotre choix est donc 1 joueur en mode Hard\n\nC'est parti!\n\n");
        
        	
        return 0;
        }
        


        en fait avec les "do while" le prog demande le nombre de joueur puis le niveau de jeu et devrais afficher le message sauf que dans mon cas après avoir tapé le niveau je retourne au début du prog et il demande le nombre de joueur à nouveau et continu par le niveau pour enfin m'afficher le message!

        Curieux et incompréhensible??

        Merci d'avance
        • Partager sur Facebook
        • Partager sur Twitter
          23 octobre 2008 à 12:43:01

          C'est tout à fait compréhensible, à chaque test du type
          if (Menu_nbjoueur()==1 && Menu_level()==1)
          

          tu appelles les fonction Menu_nbjoueur et Menu_level.

          Il serait plus appropriés d'appelé qu'une seul fois ces fonctions et de stocker la valeur de retour dans une variable (ou a la rigueur, les appeler dans un switch).
          • Partager sur Facebook
          • Partager sur Twitter
            23 octobre 2008 à 12:48:08

            Citation : Brugnar

            Il serait plus appropriés d'appelé qu'une seul fois ces fonctions et de stocker la valeur de retour dans une variable



            Comment faire pour ce genre de manip je ne vois pas trop :(
            • Partager sur Facebook
            • Partager sur Twitter
              23 octobre 2008 à 13:05:49

              Appeler une fonction
              variable = fonction();
              


              Est-ce qu'au moins tu as compris pourquoi ce que tu as écrit ne va pas ?
              • Partager sur Facebook
              • Partager sur Twitter
                23 octobre 2008 à 13:17:46

                si j'ai bien compris c'est parce que la structure if teste 2 choses à la suite
                • Partager sur Facebook
                • Partager sur Twitter
                  23 octobre 2008 à 13:34:33

                  Pas du tout.

                  Citation : coreysic

                  if (Menu_nbjoueur()==1 && Menu_level()==1)
                  		printf("\n\nVotre choix est donc 1 joueur en mode Easy\n\nC'est parti!\n\n");
                  
                  	else if (Menu_nbjoueur()==1 && Menu_level()==2)
                  		printf("\n\nVotre choix est donc 1 joueur en mode Normal\n\nC'est parti!\n\n");
                  
                  	else if (Menu_nbjoueur()==1 && Menu_level()==3)
                  		printf("\n\nVotre choix est donc 1 joueur en mode Hard\n\nC'est parti!\n\n");
                  




                  if (Menu_nbjoueur()==1 && Menu_level()==1)
                  ==> Appel à Menu_nbjoueur()
                  ====> Affichage du menu de choix du nombre de joueurs et demande à l'utilisateur de saisir un nombre
                  ====> Le joueur entre 1 => Menu_nbjoueur() == 1 est vrai
                  ==> Appel à Menu_level()
                  ====> Affichage du menu de choix du niveau et demande à l'utilisateur de saisir un nombre
                  ====> Le joueur entre 2 => Menu_level() == 1 est faux
                  Menu_nbjoueur()==1 && Menu_level()==1 est faux donc on va dans le else

                  else if (Menu_nbjoueur()==1 && Menu_level()==2)
                  ==> Appel à Menu_nbjoueur()
                  ====> Re-affichage du menu de choix du nombre de joueurs et re-demande à l'utilisateur de saisir un nombre

                  etc.

                  Tu comprends ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 octobre 2008 à 13:48:02

                    Salut,

                    do
                    	{
                    		printf("Combien de joueur (1 ou 2)? ");
                    		scanf_s("%d",&nbjoueur);
                    	}
                    	while (nbjoueur!=1 && nbjoueur!=2);
                    


                    J'ai du mal à comprendre comment tu peux sortir de cette boucle car elle dit "si nbjoueur n'est pas egal a 1 et à 2, on ne sort pas".

                    Remplacer le symbole && par || serait plus approprié.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 octobre 2008 à 13:51:31

                      a oki j'ai bien compris mon erreur maintenant merci!
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 octobre 2008 à 13:52:47

                        Si il met || il sortira même si nbjoueur = 3.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 octobre 2008 à 14:05:39

                          Citation : RyuSama

                          Salut,

                          do
                          	{
                          		printf("Combien de joueur (1 ou 2)? ");
                          		scanf_s("%d",&nbjoueur);
                          	}
                          	while (nbjoueur!=1 && nbjoueur!=2);
                          



                          J'ai du mal à comprendre comment tu peux sortir de cette boucle car elle dit "si nbjoueur n'est pas egal a 1 et à 2, on ne sort pas".

                          Remplacer le symbole && par || serait plus approprié.



                          Pas du tout, au contraire, il ne boucle que si nbjoueur est à la fois différent de 1 et de 2 (donc avec 0, 4, -548 ou autre). En revanche, si nbjoueur est à 1 ou à 2, un des deux operandes est faux, et comme faux est l'élément absorbant du ET, il sort de la boucle.
                          C'est tout à fait correct ce qu'il a écrit.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            23 octobre 2008 à 14:35:02

                            mcyrb a raison !

                            Est-ce que tu as bien compris pourquoi il t'affichait plusieurs fois ton menu ?

                            en fait partout dans ton code où il va y avoir marqué menu_nbjoueurs() ou Menu_level(), tu peux remplacer ces appels par le code de la fonction ! Donc même si l'appel de la fonction est dans un if, il va rentrer dedans et donc t'afficher le texte !
                            Il faut appliquer ce que Brugnar a dit :

                            int Menu_nbjoueur()
                            {
                            	int nbjoueur=0;
                            
                            	do
                            	{
                            		printf("Combien de joueur (1 ou 2)? ");
                            		scanf_s("%d",&nbjoueur);
                            	}
                            	while (nbjoueur!=1 && nbjoueur!=2);
                            
                                    return nbjoueur;
                            
                            }
                            
                            int Menu_level()
                            {
                            	int level=0;
                            	
                            	do
                            	{
                            		printf("\n\nVous avez le choix entre:\n\n1-Easy\n2-Normal\n3-Hard");
                            		printf("\n\nVotre choix? ");
                            		scanf_s("%d",&level);
                            	}
                            	while (level!=1 && level!=2 && level!=3);
                            
                                    return level;
                            }
                            
                            int main (int argc, char *argv[])
                            {
                            	printf("**JEU DU CHIFFRE MYSTERE by MG**\n\n\n\n");
                            
                                    //Ici on appelle qu'une seule fois chacune des deux fonctions
                                    //et on stocke les réponses dans des variables
                            
                                    int nombredeJoueurs = Menu_nbjoueur();
                                    int choixDuNiveau = Menu_level();
                            
                            	if (nombredeJoueurs==1 && choixDuNiveau==1)
                            		printf("\n\nVotre choix est donc 1 joueur en mode Easy\n\nC'est parti!\n\n");
                            
                            	else if (nombredeJoueurs==1 && choixDuNiveau==2)
                            		printf("\n\nVotre choix est donc 1 joueur en mode Normal\n\nC'est parti!\n\n");
                            
                            	else if (nombredeJoueurs==1 && choixDuNiveau==3)
                            		printf("\n\nVotre choix est donc 1 joueur en mode Hard\n\nC'est parti!\n\n");
                            
                            	
                            return 0;
                            }
                            



                            • Partager sur Facebook
                            • Partager sur Twitter

                            question sur le while?

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown