Se connecter avec
S'enregistrer | Connectez-vous

Probleme de sortie de boucle avec dev c++ ( en c++ )

Dernière réponse : dans Programmation

Bonjours, j'essaye de faire une simulation de jeux de combat simple: deux adversaire ( jouer et ordinateur ) lance chaqu'un leur tour un dés, celui qui fait le plus petit score perd des points de vie.
La boucle est sensée s'arreter des que l'un des adversaires n'a plus de points de vie, cependant j'utilise dev c++ et mon programme se ferme dès qu'il atteint la ligne "break", j'ai essayer de mettre des pauses un peut partout mais sa ne resoud pas le probleme.
voici le code :

  1. #include <time.h>
  2. #include <stdlib.h>
  3. #include <iostream.h>
  4. #include <stdio.h>
  5. int main()
  6.  
  7. {
  8. int pv =30;
  9. int pvc=10;
  10. char combat;
  11. cout << " Combat ! \n Appuyer sur 1 pour lancer le des ";
  12. cin >> combat;
  13. if (combat == 1)
  14. system (" pause" );
  15.  
  16. while (pv>0)
  17. {
  18. srand((unsigned) time(NULL));
  19.  
  20. int a = rand()%6+1;
  21. cout << a;
  22. cout <<". \n";
  23. system (" pause" );
  24.  
  25. int b = rand()%6+1;
  26. cout << "La créature fait un score de ";
  27. cout << b;
  28. cout << ". \n";
  29.  
  30. if (a<b)
  31. {
  32. pv -= 2;
  33. }
  34. if (b<a)
  35. {
  36. pvc -= 2;
  37. }
  38. cout << "il vous reste ";
  39. cout << pv;
  40. cout << " points de vie \n";
  41. cout << "il reste a la creature ";
  42. cout << pvc;
  43. cout << " points de vie \n";
  44. system ( "pause" );
  45.  
  46. if (pvc == 0); //si j'enlève cette partie là, la boucle marche mais le combat ne s'arrete pas quand l'ordinateur perd.
  47. {
  48. break;
  49. system ( "pause" );
  50. }
  51. }
  52. cout << " vous avez gagné ce combat!";
  53. system ( "pause" );
  54.  
  55. }

Autres pages sur : probleme sortie boucle dev

Lassé par la pub ? Créez un compte
Expert Programmation

pagu: http://fr.wikipedia.org/wiki/Indentation

C'est super important. Pour toi, qui débute, pour celui qui te relit (débogage, audit, correcteur, prof, maintenance), pour montrer du respect envers ceux qui veulent bien t'aider.

Aucun développeur, même le plus aguerri, n'oublie d'indenter son code.

De nouveau, édite ton premier message pour présenter ton code correctement indenté. (C'est pour ça que nous imposons la balise [code], c'est pour que l'indentation soit respectée à l'affichage).

Il n'est pas impossible que la solution te saute alors aux yeux ;) 

d'accord.
Bon je galere avec block, quand je compile mon programme et que je le lance sa me met juste Hello World ( aucune autre fenetre n'est ouverte, si j'essaye de le lancer à partir du dossier ou il est ( en lançant le .exe ) sa ferme directement le programme sans que j'ai le temps de rien voir...

et sinon, ton code :
*/ srand : une seule fois et pas a chaque boucle :o 
*/ l'utilisation de rand est a revoir : cfr man
*/ les cout, tu peux les faire en cascade :o 
*/ faut pas utiliser "\n" mais std::endl
*/ ligne 46 : interressant le point virgule ...

Perso j'utilise visual c++ qui a un debugger tres puissant !

Sinon en se qui concerne ton probleme, j'ai regardé rapidemment le code ca peut pas marcher avec le break. Il y a un probleme dans le code
Evite ce genre de sortie de boucle :ouch:  .Soit un peu patient au debut c'est pas facile et c'est en faisant des erreurs qu'on apprend :) 
Expert Programmation

Indentation correcte + réflexion quant au point-virgule de la ligne 46 devraient suffire.

"pv égale 0 ou pvc égale 0" s'écrit comme ceci en C :
pv == 0 || pvc == 0

moué voici mon nouveau code et j'ai toujours le meme probleme ( la boucle ne marche pas )

  1. #include <time.h>
  2. #include <stdlib.h>
  3. #include <iostream.h>
  4. #include <stdio.h>
  5.  
  6.  
  7. int main()
  8.  
  9.  
  10. {
  11. int pv =30;
  12. int pvc=10;
  13. char combat;
  14. cout << " Combat ! \n Appuyer sur 1 pour lancer le des ";
  15. cin >> combat;
  16. if (combat == 1)
  17. system (" pause");
  18. while (pv>0 || pvc >0)
  19. {
  20.  
  21. srand((unsigned) time(NULL));
  22. int a = rand()%6+1;
  23. cout << a;
  24. cout <<". \n";
  25. system (" pause");
  26.  
  27. int b = rand()%6+1;
  28. cout << "La creature fait un score de ";
  29. cout << b;
  30. cout << ". \n";
  31.  
  32. if (a<b)
  33. {
  34. pv -= 2;
  35. }
  36. if (b<a)
  37. {
  38. pvc -= 2;
  39. }
  40. cout << "il vous reste ";
  41. cout << pv;
  42. cout << " points de vie \n";
  43. cout << "il reste a la creature ";
  44. cout << pvc;
  45. cout << " points de vie \n";
  46. system ( "pause");
  47.  
  48.  
  49. }
  50. cout << " vous avez gagné ce combat!";
  51. system ( "pause");
  52. }

ok ben j'ai un autre probleme en faite, toute ce que je rajoute ou modifie ne change rien... si je met tapez 2 au lieu de 1 dans mon programme je verais toujours "tapez 1".
Bon j'ai lancé une nouvelle fiche et j'ai refait ma boucle avec Break et sa marche, je comprend pas trop pourquoi mais bon. Merci pour l'aide :) 

Bon j'ai pas compris ce que tu veux faire mais cela ne fait rien.
1°) vire les system pause.
2°) Ca ne sert à rien de faire un "system pause" après un break car tu n'exécute pas le code après un break.
3°) De plus tu as fait une erreur de débutant qui arrive même à ceux qui programme depuis de longues années. Tu as mis un ';' à la ligne 46 de ton programme d'origine.
if (pvc == 0) ; //si j'enlève cette partie là, la boucle marche mais le combat ne s'arrete pas quand l'ordinateur perd.

Donc le test est foireux (tu exécute le code entre ) et ; soit rien, tu poursuits avec le code entre accolade et tu fais le break qui te sort de ta boucle.
voila, CQFD

Pour la seconde version de ton code il faut que tu modifie ton while ()

tu ne dois continuer que SI toi ET la créature possédiez des points de vie.
C'est donc pas :
while (pv>0 || pvc >0)
mais :
while (pv>0 && pvc >0)

que tu doit écrire.

Lassé par la pub ? Créez un compte