Pendu
Résolu/Fermé
Xifly
Messages postés
44
Date d'inscription
vendredi 3 janvier 2014
Statut
Membre
Dernière intervention
8 décembre 2017
-
Modifié par Xifly le 23/01/2014 à 15:53
Xifly Messages postés 44 Date d'inscription vendredi 3 janvier 2014 Statut Membre Dernière intervention 8 décembre 2017 - 24 janv. 2014 à 18:12
Xifly Messages postés 44 Date d'inscription vendredi 3 janvier 2014 Statut Membre Dernière intervention 8 décembre 2017 - 24 janv. 2014 à 18:12
A voir également:
- Pendu ascii
- Ascii - Guide
- À l’aide des tableaux ci-dessous, trouvez le mot dont le code ascii est le suivant : 72 65 6a 6f 69 6e 64 72 65 - Forum C
- Ascii tabulation ✓ - Forum Programmation
- À l'aide des tableaux ci-dessous, trouvez le mot dont le code ascii est le suivant : 61 64 6d 69 73 73 69 6f 6e - Forum Programmation
- Option de filtre ascii - Forum LibreOffice / OpenOffice
3 réponses
Xifly
Messages postés
44
Date d'inscription
vendredi 3 janvier 2014
Statut
Membre
Dernière intervention
8 décembre 2017
23 janv. 2014 à 16:14
23 janv. 2014 à 16:14
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); }
Utilisateur anonyme
24 janv. 2014 à 02:31
24 janv. 2014 à 02:31
Peux-tu mettre le résultat lors de l'exécution du programme?
[Dal]
Messages postés
6174
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 février 2024
1 083
24 janv. 2014 à 12:00
24 janv. 2014 à 12:00
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
Xifly
Messages postés
44
Date d'inscription
vendredi 3 janvier 2014
Statut
Membre
Dernière intervention
8 décembre 2017
Modifié par Xifly le 24/01/2014 à 16:49
Modifié par Xifly le 24/01/2014 à 16:49
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 ;)
Xifly
Messages postés
44
Date d'inscription
vendredi 3 janvier 2014
Statut
Membre
Dernière intervention
8 décembre 2017
24 janv. 2014 à 17:14
24 janv. 2014 à 17:14
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; }
[Dal]
Messages postés
6174
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
2 février 2024
1 083
Modifié par [Dal] le 24/01/2014 à 17:28
Modifié par [Dal] le 24/01/2014 à 17:28
Cool, bravo Xifly :-)
Apprendre à programmer, c'est aussi apprendre à déboguer :-)
Bonne continuation !
Apprendre à programmer, c'est aussi apprendre à déboguer :-)
Bonne continuation !
Xifly
Messages postés
44
Date d'inscription
vendredi 3 janvier 2014
Statut
Membre
Dernière intervention
8 décembre 2017
24 janv. 2014 à 18:12
24 janv. 2014 à 18:12
Merci beaucoup :)