Problème boucle while en c
matthew37
Messages postés
20
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai un problème avec mon programme qui sort de la boucle while ((nombre_des!=0)||(tour!=3)) pour la variable tour ainsi que pour la première boucle while.
Est-ce que quelqu'un peut m'aider ?
Merci
#include <stdio.h>
#include <stdlib.h>
int main()
{
/* déclaration de variables */
srand(time(NULL));
int de_1,de_2,de_3,un,deux,quatre,tour,nombre_des,continuer;
char touche;
continuer=1;
while(continuer==1)
{
/* valeurs initiales affectées aux variables */
de_1=de_2=de_3=un=deux=quatre=tour=0;
nombre_des=3;
/* texte d'accueil */
printf("Jeu 421.\n");
printf("Veuillez lancer 3 des.\n");
printf("Vous avez droit a 3 essais.\n");
printf("Appuyez sur n\'importe quelle touche du clavier pour commencer.\n");
printf("Bonne Chance!\n");
getch(); /* attente d'une saisie du clavier */
while ((nombre_des!=0)||(tour!=3))
{
tour=tour+1;
if (tour==2) /* deuxieme tour */
{
printf("\nIl vous reste 2 essais :\n");
}
if (tour==3) /* troisieme tour */
{
printf("\nC'est votre dernier essai!\n");
}
if ((tour==2)||(tour==3))
{
printf("Veuillez lancer %i des.\n",nombre_des);
printf("Appuyez sur n\'importe quelle touche du clavier pour continuer.\n");
getch(); /* attente d'une saisie du clavier */
}
if (nombre_des==1) /* lancer de dés avec 1 dés*/
{
de_1=1+rand()%5; /* génère un nombre aléatoire entre 1 et 6*/
printf("\nVous obtenez %i.\n",de_1);
}
if (nombre_des==2) /* lancer de dés avec 2 dés*/
{
de_1=1+rand()%5;
de_2=1+rand()%5;
printf("\nVous obtenez %i et %i.\n",de_1,de_2);
}
if (nombre_des==3) /* lancer de dés avec 3 dés*/
{
de_1=1+rand()%5;
de_2=1+rand()%5;
de_3=1+rand()%5;
printf("\nVous obtenez %i, %i et %i",de_1,de_2,de_3);
}
/*Déterminer les dés gagnant*/
if(((de_1==4)||(de_2==4)||(de_3==4))&&(quatre==0))
{
quatre=1;
nombre_des=nombre_des-1;
printf("\nBravo, vous avez un 4\n");
}
if(((de_1==2)||(de_2==2)||(de_3==2))&&(deux==0))
{
deux=1;
nombre_des=nombre_des-1;
printf("\nBravo, vous avez un 2\n");
}
if(((de_1==1)||(de_2==1)||(de_3==1))&&(un==0))
{
un=1;
nombre_des=nombre_des-1;
printf("\nBravo, Vous avez un 1\n");
}
}
/* Verdict du jeu */
if(nombre_des==0)
{
printf("\nFELICITATION! Vous avez gagne!!!\n");
}
else
{
printf("\nDOMMAGE! C'est PERDU! GAME OVER!!!\n");
}
/*Intention de recommencer*/
printf("\nVoulez-vous recommencer la partie?\n");
printf("Appuyez sur la touche O si oui, ou bien sur la touche N sinon.\n");
touche = getchar();
if((touche == 'O')||(touche == 'o'))
{
continuer = 1;
}
else
{
continuer = 0;
}
}
printf("Aurevoir!");
return 0;
}
J'ai un problème avec mon programme qui sort de la boucle while ((nombre_des!=0)||(tour!=3)) pour la variable tour ainsi que pour la première boucle while.
Est-ce que quelqu'un peut m'aider ?
Merci
#include <stdio.h>
#include <stdlib.h>
int main()
{
/* déclaration de variables */
srand(time(NULL));
int de_1,de_2,de_3,un,deux,quatre,tour,nombre_des,continuer;
char touche;
continuer=1;
while(continuer==1)
{
/* valeurs initiales affectées aux variables */
de_1=de_2=de_3=un=deux=quatre=tour=0;
nombre_des=3;
/* texte d'accueil */
printf("Jeu 421.\n");
printf("Veuillez lancer 3 des.\n");
printf("Vous avez droit a 3 essais.\n");
printf("Appuyez sur n\'importe quelle touche du clavier pour commencer.\n");
printf("Bonne Chance!\n");
getch(); /* attente d'une saisie du clavier */
while ((nombre_des!=0)||(tour!=3))
{
tour=tour+1;
if (tour==2) /* deuxieme tour */
{
printf("\nIl vous reste 2 essais :\n");
}
if (tour==3) /* troisieme tour */
{
printf("\nC'est votre dernier essai!\n");
}
if ((tour==2)||(tour==3))
{
printf("Veuillez lancer %i des.\n",nombre_des);
printf("Appuyez sur n\'importe quelle touche du clavier pour continuer.\n");
getch(); /* attente d'une saisie du clavier */
}
if (nombre_des==1) /* lancer de dés avec 1 dés*/
{
de_1=1+rand()%5; /* génère un nombre aléatoire entre 1 et 6*/
printf("\nVous obtenez %i.\n",de_1);
}
if (nombre_des==2) /* lancer de dés avec 2 dés*/
{
de_1=1+rand()%5;
de_2=1+rand()%5;
printf("\nVous obtenez %i et %i.\n",de_1,de_2);
}
if (nombre_des==3) /* lancer de dés avec 3 dés*/
{
de_1=1+rand()%5;
de_2=1+rand()%5;
de_3=1+rand()%5;
printf("\nVous obtenez %i, %i et %i",de_1,de_2,de_3);
}
/*Déterminer les dés gagnant*/
if(((de_1==4)||(de_2==4)||(de_3==4))&&(quatre==0))
{
quatre=1;
nombre_des=nombre_des-1;
printf("\nBravo, vous avez un 4\n");
}
if(((de_1==2)||(de_2==2)||(de_3==2))&&(deux==0))
{
deux=1;
nombre_des=nombre_des-1;
printf("\nBravo, vous avez un 2\n");
}
if(((de_1==1)||(de_2==1)||(de_3==1))&&(un==0))
{
un=1;
nombre_des=nombre_des-1;
printf("\nBravo, Vous avez un 1\n");
}
}
/* Verdict du jeu */
if(nombre_des==0)
{
printf("\nFELICITATION! Vous avez gagne!!!\n");
}
else
{
printf("\nDOMMAGE! C'est PERDU! GAME OVER!!!\n");
}
/*Intention de recommencer*/
printf("\nVoulez-vous recommencer la partie?\n");
printf("Appuyez sur la touche O si oui, ou bien sur la touche N sinon.\n");
touche = getchar();
if((touche == 'O')||(touche == 'o'))
{
continuer = 1;
}
else
{
continuer = 0;
}
}
printf("Aurevoir!");
return 0;
}
A voir également:
- Problème boucle while en c
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Vlc lire en boucle ✓ - Forum Lecteurs et supports vidéo
- Pc qui s'allume et s'éteint en boucle - Forum Virus
- Problème xiaomi redmi note 8t s'allume et s'éteint vibre - Forum Xiaomi
4 réponses
1 : tes des sont a 5 faces ... Rand()/%5 donne un res entre 0 et 4...
2 : ton while est valable tant qu'une des deux expression est vraie (||)
donc même si tu a ton 421 (des ==0) tu continue car tour ! =3.
Il faudrait plutot un && : revois ta logique :
si ta condition d'arret est : 421 ou 3 tours (A|B)
ta condition de poursuite est l'inverse : ~(A|B) -> (~A & ~B)
2 : ton while est valable tant qu'une des deux expression est vraie (||)
donc même si tu a ton 421 (des ==0) tu continue car tour ! =3.
Il faudrait plutot un && : revois ta logique :
si ta condition d'arret est : 421 ou 3 tours (A|B)
ta condition de poursuite est l'inverse : ~(A|B) -> (~A & ~B)
merci pour l'info
mais j'ai un autre problème avec le même programme
while (continuer==1) ne s'exécute qu'une seule fois.
est-ce que ça viendrait de l'instruction
touche = getchar();
?
merci
mais j'ai un autre problème avec le même programme
while (continuer==1) ne s'exécute qu'une seule fois.
est-ce que ça viendrait de l'instruction
touche = getchar();
?
merci