Probleme en C
twiiiix
Messages postés
325
Date d'inscription
Statut
Membre
Dernière intervention
-
twiiiix Messages postés 325 Date d'inscription Statut Membre Dernière intervention -
twiiiix Messages postés 325 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Je réalise un jeu du pendu en C et je veux rajouter la prise en compte des lettres déjà entrée mais cela ne marche pas :
main.c :
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include "fonctions.h"
#include "dico.h"
#include "perso.h"
int main(int argc, char* argv[])
{
printf(" ++++++++++++++++++++++++++++ \n");
printf(" ++++++++++++++++++++++++++++++++++++++++++++++++++ \n");
printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("+++++++++++++++++++++++ BIENVENUE DANS LE JEU DU PENDU +++++++++++++++++++++++\n");
printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf(" ++++++++++++++++++++++++++++++++++++++++++++++++++ \n");
printf(" ++++++++++++++++++++++++++++ cree par Seb\n");
printf("______________________________________________________________________________\n\n");
char continuer = 'O' ;
while(continuer =='O')
{
int choix = 0;
while(choix != 1 && choix !=2)
{
printf(" \n ____________________________\n| |\n");
printf("| 1.Un Joueur |\n");
printf("| 2.Deux Joueurs |\n");
printf("| 3.Afficher le dictionnaire |\n");
printf("|____________________________|\n\n");
printf("choix : ");
scanf("%i",&choix);
viderBuffer();
switch(choix)
{
case 1:
printf("\nMode 1 joueur : \n\n") ;
break;
case 2 :
printf("\nMode 2 joueurs : ");
break;
case 3 :
afficheDico();
break;
default:
printf("\nCe n'est pas un choix !!!!!!");
break;
}
}
char motSecret[100] ;
if (choix==1)
{
piocherMot(motSecret);
}
else if (choix==2)
{
printf("\nVeuillez taper un mot : ");
lire(motSecret,100);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
}
int *lettreTrouve = NULL;// tableau de booleen qui indique quelle lettredu mot a été trouvée
char lettreEntre ;
int coupRestant = 10;
int i;
int j =0;
char lettreDejaEntree[30] = "";
char *test = NULL; // Pour savoir si la lettre entré se trouve dans le mot
char *testDeux =NULL;
int taille = strlen(motSecret);
lettreTrouve = malloc(taille * sizeof(int));
for (i = 0 ; i < taille ; i++) // initialise le tableau
{
lettreTrouve[i] = 0;
}
for(i=0; i<taille; i++) //met le mot entré en majuscule
{
motSecret[i] = toupper(motSecret[i]);
}
while(coupRestant>0 && gagne(lettreTrouve,taille) == 0)// boucle principale
{
printf("\n\nIl vous reste %i coup a jouer", coupRestant);
printf("\nMot secret : ");
for( i=0 ; i<taille ; i++ )// affiche le mot secret en tenant compte des lettres non trouvée
{
if(lettreTrouve[i] || motSecret[i]=='-'|| motSecret[i]==39 ||motSecret[i]==' ')
{
printf("%c",motSecret[i]);
}
else
{
printf("*");
}
}
printf("\n\nTapez une lettre : ");
lettreEntre=lireCaractere();// lis la lettre entré par l'utilisateur
testDeux = NULL;
testDeux = strchr(lettreDejaEntree,lettreEntre);
if(testDeux == NULL)// si la lettre n'a pas deja ete entré
{
sprintf(lettreDejaEntree[j], "%c" ,lettreEntre); //(je pense que l'erreur est ici )
j++ ;
changbool( motSecret, lettreTrouve, lettreEntre,taille) ;// met a jour le tableau de booleen
test = strchr( motSecret, lettreEntre);
if(test == NULL ) //si la lettre ne se trouve pas dans le mot
{
printf("La lettre ne se trouve pas dans le mot secret\n");
coupRestant--;
afficheperso(coupRestant);
}
}
else
{
printf("\nVous avez deja tape cette lettre !!\n\n");
}
}
if(gagne(lettreTrouve,taille))
{
printf("\n\nVous avez gagner !!!!\nLe mot secret etait bien : %s\n",motSecret) ;
afficheperso(-1);
}
else
{
printf("\nDomage vous avez perdu, le mot secret etait : %s \n",motSecret) ;
afficheperso(-2);
}
printf("\n\nVoulez-vous rejouer ? (O/N) :") ; //demande si il veut rejouer
continuer = lireCaractere() ;
if (continuer=='N')
{
printf("\n\n");
return 0 ;
}
}
}
dico.c :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "dico.h"
void piocherMot(char chaine[])
{
int i =0 ;
int numMot =0 ; // numero du mot (au hasard)
int nbMot = 0 ;//nombre de mots
char caractereActuel = 0 ;
FILE* dico = NULL ;
dico = fopen("pendu.dico","r"); //ouverture du dico
if(dico!=NULL)//si l'ouvertu a reussi
{
rewind(dico); // on se place au debut du fichier
do //on compte le nombre de \n
{
caractereActuel = fgetc(dico);
if(caractereActuel == '\n')
{
nbMot++ ;
}
}
while(caractereActuel!= EOF);
numMot = nombreAleatoire(nbMot) ; //numerot du mot choisir aleatoirement
rewind(dico);// on se remet au debut du fichier
do //on se place devant le mot tirer au sort
{
caractereActuel = fgetc(dico) ;
if (caractereActuel=='\n')
{
i++;
}
}
while(i<numMot);
fgets(chaine,100,dico); //on le met en memoire
chaine[strlen(chaine) - 1] = '\0';//on remplace le \n par un \0
fclose(dico) ;// on ferme le dico
}
else if(dico=NULL) //si l'ouverture a echoué
{
printf("ERREUR : impossible d'initialiser le dictionnaire\n\n") ;
system("PAUSE");
exit(0);
}
}
void afficheDico(void)
{
int i = 0;
FILE* dico = NULL;
dico = fopen("pendu.dico","r");
if(dico!=NULL)
{
printf("Mots du dictionnaire : \n\n");
rewind(dico);
do
{
i = fgetc(dico);
printf("%c",i);
}
while(i!=EOF);
}
else
{
printf("Impossible d'afficher les mots du dictionnaire\n");
}
}
int nombreAleatoire(int nombreMax)
{
srand(time(NULL));
return (rand() % nombreMax);
}
fonctions.c :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "fonctions.h"
void viderBuffer()
{
int c = 0;
while (c != '\n' && c != EOF)
{
c = getchar();
}
}
int lire(char *chaine, int longueur)
{
char *positionEntree = NULL;
if (fgets(chaine, longueur, stdin) != NULL)
{
positionEntree = strchr(chaine, '\n');
if (positionEntree != NULL)
{
*positionEntree = '\0';
}
else
{
viderBuffer();
}
return 1;
}
else
{
viderBuffer();
return 0;
}
}
char lireCaractere()
{
char caractere ;
caractere = getchar();
caractere = toupper(caractere);
while (getchar() != '\n') ;
return caractere;
}
void changbool (char chaine[] ,int bol[],const char lettre,int taille) // permet de modifier le tableau de booleen
{
int i ;
for (i=0; i<taille; i++)
{
if (lettre == chaine[i])
{
bol[i] = 1 ;
}
}
}
int gagne(int tableaubool[], int taille)
{
int i ;
int gagner = 1;
for(i=0; i<taille; i++)
{
if (tableaubool[i]== 0)
{
gagner = 0;
}
}
return gagner ;
}
perso.c : contient une fonction affichant un pendu en fonction du nombre de coup restant.
je pense que je n'ai pas besoin d'inclure les fichiers .h (il ne contiennent que les prototypes).
Désolé pour les fautes d'orthographe.
Merci d'avance pour vos réponses.
Je réalise un jeu du pendu en C et je veux rajouter la prise en compte des lettres déjà entrée mais cela ne marche pas :
main.c :
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include "fonctions.h"
#include "dico.h"
#include "perso.h"
int main(int argc, char* argv[])
{
printf(" ++++++++++++++++++++++++++++ \n");
printf(" ++++++++++++++++++++++++++++++++++++++++++++++++++ \n");
printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf("+++++++++++++++++++++++ BIENVENUE DANS LE JEU DU PENDU +++++++++++++++++++++++\n");
printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf(" ++++++++++++++++++++++++++++++++++++++++++++++++++ \n");
printf(" ++++++++++++++++++++++++++++ cree par Seb\n");
printf("______________________________________________________________________________\n\n");
char continuer = 'O' ;
while(continuer =='O')
{
int choix = 0;
while(choix != 1 && choix !=2)
{
printf(" \n ____________________________\n| |\n");
printf("| 1.Un Joueur |\n");
printf("| 2.Deux Joueurs |\n");
printf("| 3.Afficher le dictionnaire |\n");
printf("|____________________________|\n\n");
printf("choix : ");
scanf("%i",&choix);
viderBuffer();
switch(choix)
{
case 1:
printf("\nMode 1 joueur : \n\n") ;
break;
case 2 :
printf("\nMode 2 joueurs : ");
break;
case 3 :
afficheDico();
break;
default:
printf("\nCe n'est pas un choix !!!!!!");
break;
}
}
char motSecret[100] ;
if (choix==1)
{
piocherMot(motSecret);
}
else if (choix==2)
{
printf("\nVeuillez taper un mot : ");
lire(motSecret,100);
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
}
int *lettreTrouve = NULL;// tableau de booleen qui indique quelle lettredu mot a été trouvée
char lettreEntre ;
int coupRestant = 10;
int i;
int j =0;
char lettreDejaEntree[30] = "";
char *test = NULL; // Pour savoir si la lettre entré se trouve dans le mot
char *testDeux =NULL;
int taille = strlen(motSecret);
lettreTrouve = malloc(taille * sizeof(int));
for (i = 0 ; i < taille ; i++) // initialise le tableau
{
lettreTrouve[i] = 0;
}
for(i=0; i<taille; i++) //met le mot entré en majuscule
{
motSecret[i] = toupper(motSecret[i]);
}
while(coupRestant>0 && gagne(lettreTrouve,taille) == 0)// boucle principale
{
printf("\n\nIl vous reste %i coup a jouer", coupRestant);
printf("\nMot secret : ");
for( i=0 ; i<taille ; i++ )// affiche le mot secret en tenant compte des lettres non trouvée
{
if(lettreTrouve[i] || motSecret[i]=='-'|| motSecret[i]==39 ||motSecret[i]==' ')
{
printf("%c",motSecret[i]);
}
else
{
printf("*");
}
}
printf("\n\nTapez une lettre : ");
lettreEntre=lireCaractere();// lis la lettre entré par l'utilisateur
testDeux = NULL;
testDeux = strchr(lettreDejaEntree,lettreEntre);
if(testDeux == NULL)// si la lettre n'a pas deja ete entré
{
sprintf(lettreDejaEntree[j], "%c" ,lettreEntre); //(je pense que l'erreur est ici )
j++ ;
changbool( motSecret, lettreTrouve, lettreEntre,taille) ;// met a jour le tableau de booleen
test = strchr( motSecret, lettreEntre);
if(test == NULL ) //si la lettre ne se trouve pas dans le mot
{
printf("La lettre ne se trouve pas dans le mot secret\n");
coupRestant--;
afficheperso(coupRestant);
}
}
else
{
printf("\nVous avez deja tape cette lettre !!\n\n");
}
}
if(gagne(lettreTrouve,taille))
{
printf("\n\nVous avez gagner !!!!\nLe mot secret etait bien : %s\n",motSecret) ;
afficheperso(-1);
}
else
{
printf("\nDomage vous avez perdu, le mot secret etait : %s \n",motSecret) ;
afficheperso(-2);
}
printf("\n\nVoulez-vous rejouer ? (O/N) :") ; //demande si il veut rejouer
continuer = lireCaractere() ;
if (continuer=='N')
{
printf("\n\n");
return 0 ;
}
}
}
dico.c :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "dico.h"
void piocherMot(char chaine[])
{
int i =0 ;
int numMot =0 ; // numero du mot (au hasard)
int nbMot = 0 ;//nombre de mots
char caractereActuel = 0 ;
FILE* dico = NULL ;
dico = fopen("pendu.dico","r"); //ouverture du dico
if(dico!=NULL)//si l'ouvertu a reussi
{
rewind(dico); // on se place au debut du fichier
do //on compte le nombre de \n
{
caractereActuel = fgetc(dico);
if(caractereActuel == '\n')
{
nbMot++ ;
}
}
while(caractereActuel!= EOF);
numMot = nombreAleatoire(nbMot) ; //numerot du mot choisir aleatoirement
rewind(dico);// on se remet au debut du fichier
do //on se place devant le mot tirer au sort
{
caractereActuel = fgetc(dico) ;
if (caractereActuel=='\n')
{
i++;
}
}
while(i<numMot);
fgets(chaine,100,dico); //on le met en memoire
chaine[strlen(chaine) - 1] = '\0';//on remplace le \n par un \0
fclose(dico) ;// on ferme le dico
}
else if(dico=NULL) //si l'ouverture a echoué
{
printf("ERREUR : impossible d'initialiser le dictionnaire\n\n") ;
system("PAUSE");
exit(0);
}
}
void afficheDico(void)
{
int i = 0;
FILE* dico = NULL;
dico = fopen("pendu.dico","r");
if(dico!=NULL)
{
printf("Mots du dictionnaire : \n\n");
rewind(dico);
do
{
i = fgetc(dico);
printf("%c",i);
}
while(i!=EOF);
}
else
{
printf("Impossible d'afficher les mots du dictionnaire\n");
}
}
int nombreAleatoire(int nombreMax)
{
srand(time(NULL));
return (rand() % nombreMax);
}
fonctions.c :
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "fonctions.h"
void viderBuffer()
{
int c = 0;
while (c != '\n' && c != EOF)
{
c = getchar();
}
}
int lire(char *chaine, int longueur)
{
char *positionEntree = NULL;
if (fgets(chaine, longueur, stdin) != NULL)
{
positionEntree = strchr(chaine, '\n');
if (positionEntree != NULL)
{
*positionEntree = '\0';
}
else
{
viderBuffer();
}
return 1;
}
else
{
viderBuffer();
return 0;
}
}
char lireCaractere()
{
char caractere ;
caractere = getchar();
caractere = toupper(caractere);
while (getchar() != '\n') ;
return caractere;
}
void changbool (char chaine[] ,int bol[],const char lettre,int taille) // permet de modifier le tableau de booleen
{
int i ;
for (i=0; i<taille; i++)
{
if (lettre == chaine[i])
{
bol[i] = 1 ;
}
}
}
int gagne(int tableaubool[], int taille)
{
int i ;
int gagner = 1;
for(i=0; i<taille; i++)
{
if (tableaubool[i]== 0)
{
gagner = 0;
}
}
return gagner ;
}
perso.c : contient une fonction affichant un pendu en fonction du nombre de coup restant.
je pense que je n'ai pas besoin d'inclure les fichiers .h (il ne contiennent que les prototypes).
Désolé pour les fautes d'orthographe.
Merci d'avance pour vos réponses.