Pendu
Résolu
Xifly
Messages postés
44
Date d'inscription
Statut
Membre
Dernière intervention
-
Xifly Messages postés 44 Date d'inscription Statut Membre Dernière intervention -
Xifly Messages postés 44 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Pendu ascii
- Code ascii - Guide
- Jeu du pendu - Télécharger - Vie quotidienne
- Etoile ascii ✓ - Forum Clavier
- \N ascii - Forum Programmation
- Code ascii tabulation - Forum Access
3 réponses
pourtant j'ai fais un petit programme de test et ça marche très bien :
#include <stdio.h> #include <string.h> int main(void) { char lettre_utilisees[26]; int i = 0; char lettre; int ascii; //Initialisation de lettre_utilises for (i=0 ; i < 26; i++) { lettre_utilisees[i]= '-'; } lettre_utilisees[26] = '\0'; printf("lettre utilisées : %s\n", lettre_utilisees); printf("Entrez une lettre :"); lettre = getchar(); //mémorise la lettre tapée lettre = toupper(lettre); //mise en majuscule while(getchar() != '\n'); //permet de comptabiliser uniquement la première lettre entrée printf("lettre tapée : %c\n", lettre); ascii = lettre; printf("ascii : %d\n", ascii); lettre_utilisees[ascii-65] = lettre; lettre_utilisees[26] = '\0'; printf("lettre utilisées : %s\n", lettre_utilisees); }
Salut Xifly,
C'est dû au fait que tu n'alloues pas le bon espace pour lettre_utilisees, qui, pour contenir l'alphabet doit être
J'ai testé ton code, et il y a des tests amusants à faire.
Par exemple, si la bonne réponse est "QUATRE" et que tu tapes la réponse "A" cinq fois, tu gagnes sans avoir trouvé les lettres restantes :-)
Dal
C'est dû au fait que tu n'alloues pas le bon espace pour lettre_utilisees, qui, pour contenir l'alphabet doit être
char lettre_utilisees[27];et non pas
char lettre_utilisees[26];, car il manquerait un espace pour le caractère
'\0'devant terminer la chaîne.
J'ai testé ton code, et il y a des tests amusants à faire.
Par exemple, si la bonne réponse est "QUATRE" et que tu tapes la réponse "A" cinq fois, tu gagnes sans avoir trouvé les lettres restantes :-)
Dal
Merci pour ta réponse
En effet en mettant 27, les lettres entrées se rentre bien dans mon tableau, à leur place. Mais je ne sais pour quelle raison, la variable
Sinon l'histoire du "a" 5 fois est réglée ;)
En effet en mettant 27, les lettres entrées se rentre bien dans mon tableau, à leur place. Mais je ne sais pour quelle raison, la variable
motAtrouverdevient une variable vide ... je peux donc rentré autant de lettre que je veux je perd au bout de 10 lettres sans rien pouvoir trouver ...
Sinon l'histoire du "a" 5 fois est réglée ;)
Tout marche, merci pour tout ! :D
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <ctype.h> #define TAILLE_MAX 1000 char flettre (char lettre) { int ascii = 0; lettre = toupper(lettre); //mise en majuscule while(getchar() != '\n'); //permet de comptabiliser uniquement la première lettre entrée ascii = lettre; while ( (ascii < 65) || (ascii > 90) ) { printf("\nVotre caract\212re n'est pas valide.\nVous devez entrer une lettre.\nLes accents ne sont pas pris en compte.\n\nVeuillez saisir une nouvelle lettre : "); lettre = getchar(); //mémorise la lettre tapée lettre = toupper(lettre); //mise en majuscule while(getchar() != '\n'); //permet de comptabiliser uniquement la première lettre entrée ascii = lettre; } return (lettre); } void fmotAtrouver(FILE* fichier, char * motAtrouver) { int caractereActuel = 0; int nombre_mots = 0; char *p; do { caractereActuel = fgetc(fichier); if (caractereActuel == '\n') { nombre_mots = nombre_mots + 1; //on comptabilise le nombre de mots dans le dictionnaire } } while (caractereActuel != EOF); if (nombre_mots < 1) { printf("Le dictionnaire ne contient aucun mot,ou un seul mot sans retour à la ligne. Nous ne pouvons pas jouer\n"); exit(EXIT_FAILURE); } rewind(fichier); //On remet le pointeur au début du fichier int nombre_aleatoire = rand() % nombre_mots; //On choisi un nombre aléatoire compris entre 0 et nombre_mots - 1 while(nombre_aleatoire >= 0 && fgets(motAtrouver, TAILLE_MAX, fichier) != NULL) { nombre_aleatoire--; } fgets(motAtrouver, TAILLE_MAX, fichier); //on va chercher le mot aléatoire motAtrouver[strlen(motAtrouver) - 1] = '\0'; //on supprime le retour à la ligne et on ferme la chaine //if ((p = strchr(motAtrouver,'\n')) != NULL) *p='\0'; //on supprime le retour à la ligne et on ferme la chaine } void fdessin(int coupsRestants) { switch(coupsRestants) { case 1 : printf("___________________\n"); printf("| |\n"); printf("| __________ |\n"); printf("| | / | |\n"); printf("| |/ 8 |\n"); printf("| | (O.o) |\n"); printf("| | /( )\\ |\n"); printf("| | / |\n"); printf("| ___|___ |\n"); printf("|_________________|\n"); break; case 2 : printf("___________________\n"); printf("| |\n"); printf("| __________ |\n"); printf("| | / | |\n"); printf("| |/ 8 |\n"); printf("| | (O.o) |\n"); printf("| | /( )\\ |\n"); printf("| | |\n"); printf("| ___|___ |\n"); printf("|_________________|\n"); break; case 3 : printf("___________________\n"); printf("| |\n"); printf("| __________ |\n"); printf("| | / | |\n"); printf("| |/ 8 |\n"); printf("| | (O.o) |\n"); printf("| | /( ) |\n"); printf("| | |\n"); printf("| ___|___ |\n"); printf("|_________________|\n"); break; case 4 : printf("___________________\n"); printf("| |\n"); printf("| __________ |\n"); printf("| | / | |\n"); printf("| |/ 8 |\n"); printf("| | (O.o) |\n"); printf("| | ( ) |\n"); printf("| | |\n"); printf("| ___|___ |\n"); printf("|_________________|\n"); break; case 5 : printf("___________________\n"); printf("| |\n"); printf("| __________ |\n"); printf("| | / | |\n"); printf("| |/ 8 |\n"); printf("| | (O.o) |\n"); printf("| | |\n"); printf("| | |\n"); printf("| ___|___ |\n"); printf("|_________________|\n"); break; case 6: printf("___________________\n"); printf("| |\n"); printf("| __________ |\n"); printf("| | / | |\n"); printf("| |/ 8 |\n"); printf("| | |\n"); printf("| | |\n"); printf("| | |\n"); printf("| ___|___ |\n"); printf("|_________________|\n"); break; case 7: printf("___________________\n"); printf("| |\n"); printf("| |\n"); printf("| | |\n"); printf("| | |\n"); printf("| | |\n"); printf("| | |\n"); printf("| | |\n"); printf("| ___|___ |\n"); printf("|_________________|\n"); break; case 8: printf("___________________\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("| ___ ___ |\n"); printf("|_________________|\n"); break; case 9: printf("___________________\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("|_________________|\n"); break; case 10: printf("___________________\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("| |\n"); printf("|_________________|\n"); break; } } void faffichage(char * lettresTrouvees, int coupsRestants, int resteAtrouver, char * lettre_utilisees) { int i = 0; printf("\nVoici le mot a trouver : %s \n\n", lettresTrouvees); printf("Il vous reste %d chance(s)\n\n", coupsRestants); printf("Il vous reste %d lettres à trouver.\n\n", resteAtrouver); printf("Vous avez déjà utilisé les lettres suivantes : "); for (i=0; i < 27; i++) { if (lettre_utilisees[i] != '-') { printf("%c", lettre_utilisees[i]); } } printf("\n\nQuelle lettre choississez-vous ? "); } void fgagne(int resteAtrouver, char * lettresTrouvees, int coupsRestants) { if (resteAtrouver == 0) { system("cls"); fdessin(coupsRestants); printf("\nVoici le mot a trouver : %s \n\n", lettresTrouvees); printf("Il vous restait encore %d chance(s)\n\n", coupsRestants); printf("\nBravo, Vous avez gagn\202 ! :D \n"); } } void fperdu(int coupsRestants, char * motAtrouver) { if (coupsRestants ==0) { system("cls"); printf("___________________\n"); printf("| |\n"); printf("| __________ |\n"); printf("| | / | |\n"); printf("| |/ 8 |\n"); printf("| | (O.o) |\n"); printf("| | /( )\\ |\n"); printf("| | / \\ |\n"); printf("| ___|___ |\n"); printf("|_________________|\n\n"); printf("Vous avez perdu, le mot \205 trouver \202t\202 %s. \n",motAtrouver); } } void finitialisation(char * lettre_utilisees) { int j = 0; for (j = 0 ; j < 26; j++) { lettre_utilisees[j]= '-'; } lettre_utilisees[26] = '\0'; } void flettre_utilisees(char * lettre_utilisees, char lettre) { int ascii = 0; ascii = lettre; lettre_utilisees[ascii-65] = lettre; lettre_utilisees[26] = '\0'; } int main(void) { //Initialisation int i = 0; char lettre; int ascii = 0; int coupsRestants = 10; int bonneLettre = 0; FILE* fichier = NULL; char motAtrouver[TAILLE_MAX] = ""; fichier = fopen("dictionnaire.txt", "r"); char lettre_utilisees[27]; //Initialiser la graine aléatoire: srand (time (NULL)); finitialisation(lettre_utilisees); if (fichier != NULL) { fmotAtrouver(fichier, motAtrouver); fclose(fichier); //on referme le dictionnaire } else { printf("Impossible d'ouvrir le dictionnaire"); return EXIT_FAILURE; } //initialisation char lettresTrouvees[strlen(motAtrouver) + 1]; int resteAtrouver = strlen(motAtrouver); //Initialisation de lettresTrouvees for (i=0 ; i < strlen(motAtrouver); i++) { lettresTrouvees[i]= '*'; } lettresTrouvees[strlen(motAtrouver)] = '\0'; while ( (coupsRestants > 0) && (resteAtrouver > 0) ) { system("cls"); fdessin(coupsRestants); faffichage(lettresTrouvees, coupsRestants, resteAtrouver, lettre_utilisees); lettre = getchar(); //mémorise la lettre tapée lettre = flettre(lettre); for (i=0 ; i < strlen(motAtrouver); i++) { if (lettre == motAtrouver[i] && lettresTrouvees[i]!=motAtrouver[i]) { lettresTrouvees[i] = motAtrouver[i]; bonneLettre = bonneLettre + 1; //permet de savoir si le joueur a trouvé au moins une lettre à cette manche resteAtrouver = resteAtrouver - 1;//permet de comptabiliser le nombre de lettre qu'il lui reste à trouver } } flettre_utilisees(lettre_utilisees, lettre); if (bonneLettre == 0) { coupsRestants = coupsRestants - 1; } bonneLettre = 0; //on remet le compteur a zéro pour chaque manche fgagne(resteAtrouver, lettresTrouvees, coupsRestants); } fperdu(coupsRestants, motAtrouver); return 0; }