Se connecter / S'enregistrer
Votre question

Programme C, les fonctions "RESOLUE"

Tags :
  • Time
  • Programmation
Dernière réponse : dans Programmation
9 Janvier 2008 20:24:10

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.


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

Autres pages sur : programme fonctions resolue

9 Janvier 2008 21:18:05

Salut

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

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

Améliore les indentations, on voit rien.
Contenus similaires
10 Janvier 2008 20:14:05

Que veut tu dire par les indentations ?
a b L Programmation
10 Janvier 2008 20:28:31

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 :) 
10 Janvier 2008 21:26:05

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 ?

  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 :

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

a b L Programmation
10 Janvier 2008 22:36:29

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.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS