Problem dans un jeu de tennis dans C
Résolu
amine2610
Messages postés
9
Date d'inscription
Statut
Membre
Dernière intervention
-
Laul -
Laul -
Bonjour,
j'ai voulu écrire un programme de simmulation de scoring d'un match de tennis.
c'est ca mon programme en C, j'ai compilé et ca bien marché, l problem, C'est que lorsque l joueur 2 gagne un set, et commence dans l 2eme set, c'est comme si il na gagné aucun set:
#include <stdio.h>
#include <conio.h>
main()
{
int B1=0, B2=0,P1=0,P2=0,S1=0,S2=0;
char C;
while ((S1<3)&&(S2<3))
{
do
{printf("Donner le joueur qui a marque : \n");
scanf("%s",&C);
if(C=='1')
{
if(B1<40)
{if(B1<=15) {B1+=15; printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
else if(B1==30) {B1=40;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
}
else if(B1==40)
{if(B2<40) {B1=0; P1++;B2=0;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
else if(B2==40) {B1=45;printf("joueur1 : %d %d AV \njoueur2 :%d %d %d\n",S1,P1,S2,P2,B2);}
else if(B2==45) {B2=40;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
}
else if(B1==45)
{B1=0; P1++; B2=0;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
}
else if(C=='2')
{
if(B2<40)
{if(B2<=15) {B2+=15;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
else if(B2==30) {B2=40;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
}
else if(B2==40)
{ if(B1<40) {B2=0; P2++; B1=0;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
else if(B1==40) {B2=45;printf("joueur1 : %d %d %d \njoueur2 :%d %d AV\n",S1,P1,B1,S2,P2,B2);}
else if (B1==45) {B1=40;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
}
else if(B2==45)
{B2=0; P2++; B1=0;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
}
} while((( (0<=P2 - P1)&&(P2-P1<2) )||( (0<=P1-P2)&&(P1-P2)<2) )||((P2<6)&&(P1<6)));
if(P2>P1) {P2=0; P1=0; S2++;printf("\nLE JOUEUR 2 A GAGNE LE JEU\n\njoueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
if(P1>P2) {P2=0; P1=0; S1++;printf("\nLE JOUEUR 1 A GAGNE LE JEU\n\njoueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
}
if(S1==3) printf("LE JOUEUR 1 A GAGNE");
else if(S2==3) printf("LE JOUEUR 2 A GAGNE");
}
SVP si quelqu'un peu m'aidé a trouvé l problem
j'ai voulu écrire un programme de simmulation de scoring d'un match de tennis.
c'est ca mon programme en C, j'ai compilé et ca bien marché, l problem, C'est que lorsque l joueur 2 gagne un set, et commence dans l 2eme set, c'est comme si il na gagné aucun set:
#include <stdio.h>
#include <conio.h>
main()
{
int B1=0, B2=0,P1=0,P2=0,S1=0,S2=0;
char C;
while ((S1<3)&&(S2<3))
{
do
{printf("Donner le joueur qui a marque : \n");
scanf("%s",&C);
if(C=='1')
{
if(B1<40)
{if(B1<=15) {B1+=15; printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
else if(B1==30) {B1=40;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
}
else if(B1==40)
{if(B2<40) {B1=0; P1++;B2=0;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
else if(B2==40) {B1=45;printf("joueur1 : %d %d AV \njoueur2 :%d %d %d\n",S1,P1,S2,P2,B2);}
else if(B2==45) {B2=40;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
}
else if(B1==45)
{B1=0; P1++; B2=0;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
}
else if(C=='2')
{
if(B2<40)
{if(B2<=15) {B2+=15;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
else if(B2==30) {B2=40;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
}
else if(B2==40)
{ if(B1<40) {B2=0; P2++; B1=0;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
else if(B1==40) {B2=45;printf("joueur1 : %d %d %d \njoueur2 :%d %d AV\n",S1,P1,B1,S2,P2,B2);}
else if (B1==45) {B1=40;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
}
else if(B2==45)
{B2=0; P2++; B1=0;printf("joueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
}
} while((( (0<=P2 - P1)&&(P2-P1<2) )||( (0<=P1-P2)&&(P1-P2)<2) )||((P2<6)&&(P1<6)));
if(P2>P1) {P2=0; P1=0; S2++;printf("\nLE JOUEUR 2 A GAGNE LE JEU\n\njoueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
if(P1>P2) {P2=0; P1=0; S1++;printf("\nLE JOUEUR 1 A GAGNE LE JEU\n\njoueur1 : %d %d %d \njoueur2 :%d %d %d\n",S1,P1,B1,S2,P2,B2);}
}
if(S1==3) printf("LE JOUEUR 1 A GAGNE");
else if(S2==3) printf("LE JOUEUR 2 A GAGNE");
}
SVP si quelqu'un peu m'aidé a trouvé l problem
A voir également:
- Problem dans un jeu de tennis dans C
- 94 jeu - Télécharger - Puzzle & Réflexion
- 94 degrés jeu - Télécharger - Divers Jeux
- Jeu zuma - Télécharger - Jeux vidéo
- Logo jeu - Télécharger - Jeux vidéo
- Jeux de moto: jeu de course 3d - Télécharger - Course
3 réponses
Salut,
En fait tu as fait du buffer overflow sans le savoir. Je t'explique :
Tu utilises char C; et tu demandes à l'utilisateur : scanf("%s",&C). Le %s est utilisé pour les char*.
Ainsi, le programme va stocker le caractère donné par l'utilisateur dans C, \n et le \0 vont déborder et le \0 (qui vaut 0) va déborder pour s'écrire finalement dans la variable la plus proche dans le tampon, à savoir S2 (dernière variable locale déclarée). Du coup, ta variable est remise à 0 à chaque entrée de l'utilisateur.
Niveau correction :
Solution propre
Au lieu de mettre char C, tu mets int C; tu utilises des scanf("%d", &C) et dans les if(C=='2"), tu mets des if(C==2) à la place. De même pour C==1.
Solution très rapide (mais moche) ^^
Tu déclares une autre variable, par exemple int S3=0; Variable qui sert à rien, mais ton erreur de buffer overflow sera reporté dessus.
Cdt ;)
En fait tu as fait du buffer overflow sans le savoir. Je t'explique :
Tu utilises char C; et tu demandes à l'utilisateur : scanf("%s",&C). Le %s est utilisé pour les char*.
Ainsi, le programme va stocker le caractère donné par l'utilisateur dans C, \n et le \0 vont déborder et le \0 (qui vaut 0) va déborder pour s'écrire finalement dans la variable la plus proche dans le tampon, à savoir S2 (dernière variable locale déclarée). Du coup, ta variable est remise à 0 à chaque entrée de l'utilisateur.
Niveau correction :
Solution propre
Au lieu de mettre char C, tu mets int C; tu utilises des scanf("%d", &C) et dans les if(C=='2"), tu mets des if(C==2) à la place. De même pour C==1.
Solution très rapide (mais moche) ^^
Tu déclares une autre variable, par exemple int S3=0; Variable qui sert à rien, mais ton erreur de buffer overflow sera reporté dessus.
Cdt ;)