Tom's Guide > Forum > Programmation > Programme C, les fonctions "RESOLUE"

Programme C, les fonctions "RESOLUE"

Forum Programmation : Programme C, les fonctions "RESOLUE"

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

La plupart d'entre vous qui suivent les cours sur le site du zero on déjà dû faire le jeu du plus et du moins.

Voila moi je bloque, en effet voici mon programme, essayer le sur votre IDE et vous verrez que si on veut jouer contre l'ordinateur le nombre mystère seras toujours 0. Apparemment le programme ne retiens pas le nombre prie au hasard et je ne vois pas comment lui faire retenir. En sachant que jouer à 2 ne crée aucun problème (normal vue que nous restons dans la fonction principal) et que j'ai pas mis de prototypes, vous pouvez trouver cette disposition étrange. Donc cher programmeur amateur ou pas sauriez vous où est le problème ?

Merci d'avance.


Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. long genereNombre ()
  5. {
  6.     //fonction qui à pour but de générer le nombre mysthère.
  7.    
  8.     long choixNiveau=0, MAX=0, MIN=1, nombreMystere=0;
  9.    
  10.     printf(" Choisissez votre niveau de difficulte : \n\n" );
  11. printf("1 = entre 1 et 100 \n" );
  12. printf("2 = entre 1 et 1000 \n" );
  13. printf("3 = entre 1 et 10000\n\n" );
  14. printf("Votre choix : " );
  15. scanf("%ld",&choixNiveau);
  16. printf("\n" );
  17. switch (choixNiveau)
  18. {
  19.       case 1:
  20.           MAX=100;
  21.           break;
  22.          
  23.           case 2 :
  24.                 MAX=1000;
  25.                 break;
  26.                
  27.                 case 3 :
  28.                     MAX=10000;
  29.                     break;
  30.                     default :
  31.                             printf("Une erreur est survenue lors du choix du niveau, veuillez recommencer !!!\n\n" );
  32.                             break;
  33.                     }
  34.          
  35.     srand(time(NULL));
  36.     nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
  37.    
  38. return nombreMystere;
  39. }
  40. // fin de la fonction genereNombre
  41. long comparateur ( long nombreMystere)
  42. {
  43.     // fonction qui s'occupe à comparer les nombres.
  44.         long compteurCoups=0, resetGame=0, nombreEntre=0;
  45.         do
  46.         {
  47.     printf("\n" );
  48.         printf("Quel est le nombre ? " );
  49.         scanf("%ld", &nombreEntre);
  50. compteurCoups++;
  51.         if (nombreMystere > nombreEntre)
  52.             printf("C'est plus !\n\n" );
  53.         else if (nombreMystere < nombreEntre)
  54.             printf("C'est moins !\n\n" );
  55.         else
  56.         {
  57.             printf("\n" );
  58.             printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n",compteurCoups);
  59.             }
  60.     } while (nombreEntre != nombreMystere);
  61.    
  62.     printf("Voulez vous recommencer la partie ?\n\n" );
  63.     printf("1 : Oui\n" );
  64.     printf("2 : Non\n" );
  65.     printf("\n" );
  66.     printf("Votre choix : " );
  67.     scanf("%ld",&resetGame);
  68.     printf("\n" );
  69.     if (resetGame>2)
  70.     {printf("Nous n'avons pas comprie votre choix, veuillez recommencer.\n\n" );}
  71. }
  72. // Fin de la fonction comparateur
  73. int main ( int argc, char** argv )
  74. {
  75. // fonction principal
  76. long nombreEntre = 0, resetGame=0, nombreJoueur=0, nombreChoisitJ1=0, nombreMystere=0;
  77.  
  78.   printf ("Bienvenue dans le jeux du plus et du moins\n\n" );
  79.     do
  80.   {
  81.   printf("Choisissez le nombre de joueur\n\n" );
  82.   printf("1 : Jouer contre l'ordinateur.\n" );
  83.   printf("2 : Jouer a deux joueurs\n\n" );
  84.   printf("Votre choix : " );
  85.   scanf("%ld",&nombreJoueur);
  86.   printf("\n" );
  87.  
  88.   // Si joueur joue contre l'ordinateur.
  89.   if (nombreJoueur==1)
  90.   {
  91. genereNombre();
  92. nombreMystere;
  93. comparateur(nombreMystere);
  94. }
  95. // Si le joueur joue à 2.
  96. else if (nombreJoueur==2)
  97. {
  98.     do
  99.     {
  100.         printf("Joueur 1 entre un nombre : " );
  101.         scanf("%ld",&nombreChoisitJ1);
  102.         printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" );
  103.             long compteurCoups=0;
  104. do
  105. {
  106.         printf("Quel est le nombre ? " );
  107.         scanf("%ld", &nombreEntre);
  108. compteurCoups++;
  109.         if (nombreChoisitJ1 > nombreEntre)
  110.             printf("C'est plus !\n\n" );
  111.         else if (nombreChoisitJ1 < nombreEntre)
  112.             printf("C'est moins !\n\n" );
  113.         else
  114.         {
  115.             printf("\n" );
  116.             printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n",compteurCoups);
  117.             }
  118.     } while (nombreEntre != nombreChoisitJ1);
  119.    
  120.   do
  121.     {
  122.     printf("Voulez vous recommencer la partie ?\n\n" );
  123.     printf("1 : Oui\n" );
  124.     printf("2 : Non\n" );
  125.     printf("\n" );
  126.     printf("Votre choix : " );
  127.     scanf("%ld",&resetGame);
  128.     printf("\n" );
  129.     if (resetGame>2)
  130.     {printf("Nous n'avons pas comprie votre choix, veuillez recommencer.\n\n" );}
  131. }while (resetGame>2);
  132. }while (resetGame==1);
  133. }
  134. // Si une erreur est faite sur le choix du nombre de joueur.
  135. else
  136. {
  137.     printf("Nous n'avons pas comprie votre choix, veuillez recommencer !!\n\n" );
  138. }
  139. }while (nombreJoueur!=1&&nombreJoueur!=2);
  140.     system("PAUSE" );
  141. }
  142. // fin fonction principal


Message édité par yoda2a le 10-01-2008 à 21:19:27
------------------------------ Ce n'est pas parce que c'est difficile qu'on n'ose pas, c'est parce qu'on n'ose pas que tout devient difficile
Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

Salut

tu as juste oublié de dire que nombreMystere = la fonction. Voila le code modifié:

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. long genereNombre ()
  5. {
  6.     //fonction qui à pour but de générer le nombre mysthère.
  7.    
  8.     long choixNiveau=0, MAX=0, MIN=1, nombreMystere=0;
  9.    
  10.     printf(" Choisissez votre niveau de difficulte : \n\n" );
  11. printf("1 = entre 1 et 100 \n" );
  12. printf("2 = entre 1 et 1000 \n" );
  13. printf("3 = entre 1 et 10000\n\n" ); 
  14. printf("Votre choix : " );
  15. scanf("%ld",&choixNiveau);
  16. printf("\n" );
  17. switch (choixNiveau)
  18. {
  19.       case 1:
  20.           MAX=100;
  21.           break;
  22.          
  23.           case 2 :
  24.                 MAX=1000;
  25.                 break;
  26.                
  27.                 case 3 :
  28.                     MAX=10000;
  29.                     break;
  30.                     default :
  31.                             printf("Une erreur est survenue lors du choix du niveau, veuillez recommencer !!!\n\n" );
  32.                             break;
  33.                     }
  34.          
  35.     srand(time(NULL));
  36.     nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
  37.    
  38. return nombreMystere;
  39. }
  40. // fin de la fonction genereNombre
  41. long comparateur ( long nombreMystere)
  42. {
  43.     // fonction qui s'occupe à comparer les nombres.
  44.         long compteurCoups=0, resetGame=0, nombreEntre=0;
  45.         do
  46.         {
  47.     printf("\n" );
  48.         printf("Quel est le nombre ? " );
  49.         scanf("%ld", &nombreEntre);
  50. compteurCoups++;
  51.         if (nombreMystere > nombreEntre)
  52.             printf("C'est plus !\n\n" );
  53.         else if (nombreMystere < nombreEntre)
  54.             printf("C'est moins !\n\n" );
  55.         else
  56.         {
  57.             printf("\n" );
  58.             printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n",compteurCoups);
  59.             }
  60.     } while (nombreEntre != nombreMystere);
  61.    
  62.     printf("Voulez vous recommencer la partie ?\n\n" );
  63.     printf("1 : Oui\n" );
  64.     printf("2 : Non\n" );
  65.     printf("\n" );
  66.     printf("Votre choix : " );
  67.     scanf("%ld",&resetGame);
  68.     printf("\n" );
  69.     if (resetGame>2)
  70.     {printf("Nous n'avons pas comprie votre choix, veuillez recommencer.\n\n" );}
  71. }
  72. // Fin de la fonction comparateur
  73. int main ( int argc, char** argv )
  74. {
  75. // fonction principal
  76. long nombreEntre = 0, resetGame=0, nombreJoueur=0, nombreChoisitJ1=0, nombreMystere=0;
  77.  
  78.   printf ("Bienvenue dans le jeux du plus et du moins\n\n" );
  79.     do
  80.   {
  81.   printf("Choisissez le nombre de joueur\n\n" );
  82.   printf("1 : Jouer contre l'ordinateur.\n" );
  83.   printf("2 : Jouer a deux joueurs\n\n" );
  84.   printf("Votre choix : " );
  85.   scanf("%ld",&nombreJoueur);
  86.   printf("\n" );
  87.  
  88.   // Si joueur joue contre l'ordinateur.
  89.   if (nombreJoueur==1)
  90.   {
  91. nombreMystere = genereNombre(); //ligne modifié.
  92. comparateur(nombreMystere);
  93. }
  94. // Si le joueur joue à 2.
  95. else if (nombreJoueur==2)
  96. {
  97.     do
  98.     {
  99.         printf("Joueur 1 entre un nombre : " );
  100.         scanf("%ld",&nombreChoisitJ1);
  101.         printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" );
  102.             long compteurCoups=0;
  103. do
  104. {
  105.         printf("Quel est le nombre ? " );
  106.         scanf("%ld", &nombreEntre);
  107. compteurCoups++;
  108.         if (nombreChoisitJ1 > nombreEntre)
  109.             printf("C'est plus !\n\n" );
  110.         else if (nombreChoisitJ1 < nombreEntre)
  111.             printf("C'est moins !\n\n" );
  112.         else
  113.         {
  114.             printf("\n" );
  115.             printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n",compteurCoups);
  116.             }
  117.     } while (nombreEntre != nombreChoisitJ1);
  118.    
  119.   do
  120.     {
  121.     printf("Voulez vous recommencer la partie ?\n\n" );
  122.     printf("1 : Oui\n" );
  123.     printf("2 : Non\n" );
  124.     printf("\n" );
  125.     printf("Votre choix : " );
  126.     scanf("%ld",&resetGame);
  127.     printf("\n" );
  128.     if (resetGame>2)
  129.     {printf("Nous n'avons pas comprie votre choix, veuillez recommencer.\n\n" );}
  130. }while (resetGame>2);
  131. }while (resetGame==1);
  132. }
  133. // Si une erreur est faite sur le choix du nombre de joueur.
  134. else
  135. {
  136.     printf("Nous n'avons pas comprie votre choix, veuillez recommencer !!\n\n" );
  137. }
  138. }while (nombreJoueur!=1&&nombreJoueur!=2);
  139.     system("PAUSE" );
  140. }
  141. // fin fonction principal

Répondre à quarty

Améliore les indentations, on voit rien.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

Que veut tu dire par les indentations ?

------------------------------ Ce n'est pas parce que c'est difficile qu'on n'ose pas, c'est parce qu'on n'ose pas que tout devient difficile
Répondre à yoda2a

C'est pour bien voir où les blocks commencent et se terminent. Je n'exécute pas les codes sources que je vois passer par là, alors si je vois pas bien le code, j'aide pas :)

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky

C'est mieux comment cela ? Si oui je voudrais savoirs pourquoi est ce que le jeu (1 joueurs) ne recommence pas lorsque le joueur le demande ?

Code :
  1. #include <stdio.h>
  2.     #include <stdlib.h>
  3.     #include <time.h>
  4.    
  5.     long genereNombre ()
  6.     {
  7.         //fonction qui à pour but de générer le nombre mysthère.
  8.      
  9.         long choixNiveau=0, MAX=0, MIN=1, nombreMystere=0;
  10.      
  11.         do
  12.         {
  13.      
  14.         printf(" Choisissez votre niveau de difficulte : \n\n" );
  15.     printf("1 = entre 1 et 100 \n" );
  16.     printf("2 = entre 1 et 1000 \n" );
  17.     printf("3 = entre 1 et 10000\n\n" );
  18.     printf("Votre choix : " );
  19.     scanf("%ld",&choixNiveau);
  20.     printf("\n" );
  21.     switch (choixNiveau)
  22.     {
  23.           case 1:
  24.               MAX=100;
  25.               break;
  26.            
  27.               case 2 :
  28.                     MAX=1000;
  29.                     break;
  30.                  
  31.                     case 3 :
  32.                         MAX=10000;
  33.                         break;
  34.                         default :
  35.                                 printf("Une erreur est survenue lors du choix du niveau, veuillez recommencer !!!\n\n" );
  36.                                 break;
  37.                         }
  38.     }while (choixNiveau<1||choixNiveau>3);
  39.            
  40.         srand(time(NULL));
  41.         nombreMystere = (rand() % (MAX - MIN + 1)) + MIN;
  42.      
  43.     return nombreMystere;
  44.     }
  45.    
  46.     // fin de la fonction genereNombre
  47.    
  48.     long comparateur ( long nombreMystere)
  49.     {
  50.         // fonction qui s'occupe à comparer les nombres.
  51.             long compteurCoups=0, nombreEntre=0, resetGame=0;
  52.             do
  53.             {
  54.         printf("\n" );
  55.             printf("Quel est le nombre ? " );
  56.             scanf("%ld", &nombreEntre);
  57.    
  58.     compteurCoups++;
  59.    
  60.             if (nombreMystere > nombreEntre)
  61.                 printf("C'est plus !\n\n" );
  62.             else if (nombreMystere < nombreEntre)
  63.                 printf("C'est moins !\n\n" );
  64.             else
  65.             {
  66.                 printf("\n" );
  67.                 printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n",compteurCoups);
  68.                 }
  69.         } while (nombreEntre != nombreMystere);
  70.         do
  71.         {
  72.         printf("Voulez vous recommencer la partie ?\n\n" );
  73.         printf("1 : Oui\n" );
  74.         printf("2 : Non\n" );
  75.         printf("\n" );
  76.         printf("Votre choix : " );
  77.         scanf("%ld",&resetGame);
  78.         printf("\n" );
  79.         if (resetGame>2)
  80.         {printf("Nous n'avons pas comprie votre choix, veuillez recommencer.\n\n" );}
  81.     }while (resetGame<1||resetGame>2);
  82.     }
  83.    
  84.     // Fin de la fonction comparateur
  85.    
  86.    
  87.     int main ( int argc, char** argv )
  88.     {
  89.     // fonction principal
  90.    
  91.     long nombreEntre = 0, resetGame=0, nombreJoueur=0, nombreChoisitJ1=0, nombreMystere=0;
  92.    
  93.       printf ("Bienvenue dans le jeux du plus et du moins\n\n" );
  94.         do
  95.       {
  96.       printf("Choisissez le nombre de joueur\n\n" );
  97.       printf("1 : Jouer contre l'ordinateur.\n" );
  98.       printf("2 : Jouer a deux joueurs\n\n" );
  99.       printf("Votre choix : " );
  100.       scanf("%ld",&nombreJoueur);
  101.       printf("\n" );
  102.    
  103.    
  104.       // Si joueur joue contre l'ordinateur.
  105.       if (nombreJoueur==1)
  106.       {
  107.                           do
  108.                           {
  109.     nombreMystere=genereNombre ();
  110.     comparateur(nombreMystere);
  111.     }while (resetGame==1);
  112.    
  113.     }
  114.     // Si le joueur joue à 2.
  115.    
  116.     else if (nombreJoueur==2)
  117.     {
  118.    
  119.    
  120.    
  121.         do
  122.         {
  123.             printf("Joueur 1 entre un nombre : " );
  124.             scanf("%ld",&nombreChoisitJ1);
  125.             printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n" );
  126.                 long compteurCoups=0;
  127.     do
  128.     {
  129.             printf("Quel est le nombre ? " );
  130.             scanf("%ld", &nombreEntre);
  131.    
  132.     compteurCoups++;
  133.    
  134.             if (nombreChoisitJ1 > nombreEntre)
  135.                 printf("C'est plus !\n\n" );
  136.             else if (nombreChoisitJ1 < nombreEntre)
  137.                 printf("C'est moins !\n\n" );
  138.             else
  139.             {
  140.                 printf("\n" );
  141.                 printf ("Bravo, vous avez trouve le nombre mystere en %ld coups!!!\n\n",compteurCoups);
  142.                 }
  143.         } while (nombreEntre != nombreChoisitJ1);
  144.      
  145.       do
  146.         {
  147.         printf("Voulez vous recommencer la partie ?\n\n" );
  148.         printf("1 : Oui\n" );
  149.         printf("2 : Non\n" );
  150.         printf("\n" );
  151.         printf("Votre choix : " );
  152.         scanf("%ld",&resetGame);
  153.         printf("\n" );
  154.         if (resetGame>2)
  155.         {printf("Nous n'avons pas comprie votre choix, veuillez recommencer.\n\n" );}
  156.     }while (resetGame>2);
  157.    
  158.     }while (resetGame==1);
  159.     }
  160.     // Si une erreur est faite sur le choix du nombre de joueur.
  161.    
  162.     else
  163.     {
  164.         printf("Nous n'avons pas comprie votre choix, veuillez recommencer !!\n\n" );
  165.     }
  166.    
  167.     }while (nombreJoueur!=1&&nombreJoueur!=2);
  168.    
  169.         system("PAUSE" );
  170.     }
  171.     // fin fonction principal




Le problème doit certaintement être la :

Code :
  1. do
  2.                           {
  3.     nombreMystere=genereNombre ();
  4.     comparateur(nombreMystere);
  5.     }while (resetGame==1);


------------------------------ Ce n'est pas parce que c'est difficile qu'on n'ose pas, c'est parce qu'on n'ose pas que tout devient difficile
Répondre à yoda2a

La variable resetGame qui se trouve dans ton do...while n'est pas la même que la variable resetGame de ta fonction.
Quand tu es dans une fonction, tu n'as plus accès aux variables de l'appelant, et inversement. Quand tu rentres dans une fonction, tu changes de contexte (un nouveau contexte avec de nouvelle variables.

fait retourner la valeur de resetGame en retour de la fonction comparateur, et change de noms à chaque fois que tu fais une variable, parce que justement tu fais de tel mélanges.

------------------------------ 6800A007B81300CD10B00131C989CF26880541
81F900FA750230EDBADA03ECA80875FBECA808
74FBE4603C0175DFB80300CD10B8004CCD21
Répondre à CRicky
Tom's Guide > Forum > Programmation > Programme C, les fonctions "RESOLUE"
Aller à :

Il y a 436 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens