Problem dans un jeu de tennis dans C

Résolu
amine2610 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention   -  
 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
A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 ;)
0
amine2610 Messages postés 9 Date d'inscription   Statut Membre Dernière intervention  
 
MERCI BEAUCOUP,
c'est vraiment trés gentille,
ca march
0
Laul
 
bonjour,

J'ai télécharger la démo de tennis titans et j'ai vu sur un site que c'était en fait le jeu en entier qu'on avait et qu'il suffisait de récupérer un code sur le site de l'éditeur... mais je ne trouve rien
quelqun peut m'aider svp?
0