Bonsoir à tous.
Je post ce soir car j'ai un souci.
Voila, il faut creer un jeu du papier ciseau pierre entre l'ordinateur et un joueur humain, en c.
Chaque coup gagnant donne 1 euro.
Je suis parti d'un code crée à un exercice précedent pour le jeu en lui même (qui fonctionne), mais qui ne géré pas le gain.
Je compile le tout sous gcc sous linux
J'ai un bug sur le code que voici
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| #include <stdio.h>
#include <stdlib.h>
#include <time.h> /*pour la fonction srand*/
int main ()
{
int a, c;/*Declaration de deux variables, a pour l'humain et c pour l'ordinateur*/
int j,m;/*Variable pour compter respectivement le gain du joueur ou de la machine*/
j=0;
m=0;/*initialise à 0...*/
while ((j|m)!=10)/*tant que le joueur ou la machine ne gagne pas 10 euros...*/
{
printf("Choisir un chiffre, 0 pour papier, 1 pour pierre, 2 pour ciseau\n");/*L'humain choisi une valeur qui représente son choix*/
scanf("%d", &a);/*et est prit en compte*/
srand(time(NULL));//Calcul d'un nombre aléatoire
c=rand()%3;//et division par modulo pour limiter le nombre à 0, 1 ou 2
if (a==c)// si le joueur et l'ordinateur choisissent le même nombre
{/*Egalité entre ordinateur et humain*/
printf("Personne n'a gagné\n");/*affiche qu'il n'y a pas de vainqueur*/
if (a==0){/*Si tout les 2 ont choisi le papier*/
printf("L'ordinateur et vous avez choisi papier\n");}/*affiche papier*/
if (a==1){/*Si tout les 2 ont choisi la pierre*/
printf("L'ordinateur et vous avez choisi pierre\n");}/*affiche pierre*/
if (a==2){/*Si tout les 2 ont choisi les ciseaux*/
printf("L'ordinateur et vous avez choisi ciseau\n");}/*affiche ciseau*/
}
else if ((a==0) && (c==1)) {/*Sinon si l'ordinateur à choisi la pierre et le joueur le papier*/
printf("Vous avez gagné\n");/*affiche le vainqueur*/
j++;/*et incremente le gain du gagnant*/
printf("L'ordinateur à choisi la pierre et vous le papier\n");}/*affiche le choix*/
else if ((a==0) && (c==2)) {//code identique pour les differents cas...
printf("Vous avez perdu\n");
m++;
printf("L'ordinateur à choisi les ciseaux et vous le papier\n");}
else if ((a==1) && (c==0)) {
printf("Vous avez perdu\n");
m++;
printf("L'ordinateur à choisi le papier et vous la pierre\n");}
else if ((a==1) && (c==2)) {
printf("Vous avez gagné\n");
j++;
printf("L'ordinateur à choisi les ciseaux et vous la pierre\n");}
else if ((a==2) && (c==0)) {
printf("Vous avez gagné\n");
j++;
printf("L'ordinateur à choisi le papier et vous les ciseaux\n");}
else if ((a==2) && (c==1)) {
printf("Vous avez perdu\n");
m++;
printf("L'ordinateur à choisi la pierre et vous les ciseaux\n");}
else {//si le joueur n'a pas choisi un nombre 0, 1 ou 2, affiche un message d'erreur
printf("Veuillez entrer un nombre compris entre 0 et 2\n");
}
}
return 0;
} |
Alors, quels sont mes soucis ???
Et bien, si vous taper soit 0, soit 1, soit 2, et que vous gagnez ou perdez 10 fois (et si vous faites un ou plusieurs match nul...), aucun souci.
Le souci, c'est que si on tape une lettre, le programme boucle infiniment.
Si vous taper par exemple 3 ou un autre nombres, bey il boucle aussi mais attend la fin de la frappe.
Alors je seche un peu, j'ai pensé au if, while, mais rien ne marche (ce que j'ai essayé donc

Merci du coup de main
Partager