Bonsoir, je me dirige sur le forum a la recherche d'un peu d'aide car il y a quelque chose qui m'échappe, je vous explique..
J'ai (re)commencé mon code pour faire le jeu du pendu, et j'ai créer une fonction qui compte le nombre de caractère dans le mot à cacher, puis il le créer avec des '*' en fontion, mais voila, quand un mot contient 8 caractères, il m'affiche un [?] à la fin, par contre, 5,6,7,9 ect m'affiche correctement le mot caché....
Je pense que ca coince sur la fontions Count_And_Hide mais je ne vois vraiment pas pourquoi..
Voici mon code, en espérant ne pas trop vous saoulez..
main.c :
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
#define TABLEAU_MAX 1000
int main ( int argc, char *argv[] )
{
const int MIN = 1;
int nombre_Coup_Restant = 10;
int quantite_Mot = 0;
int mot_Aleatoire_Numero = 0;
unsigned char mot_Mystere[TABLEAU_MAX];
unsigned char mot_Mystere_Cache[TABLEAU_MAX];
srand(time(NULL));
Creation_Liste_Mot();
FILE *pendu = fopen("MOT_PENDU.txt", "r");
quantite_Mot = Combien_Mot(pendu); // fonction qui renvois la valeur du nombre de mot se trouveant dans le .txt
mot_Aleatoire_Numero = (rand() % (quantite_Mot - MIN + 1)) + MIN; // choisis un mot aléatoirement via le nombre de ligne dans le .txt
Prend_Mot_Ligne_(mot_Aleatoire_Numero, pendu, mot_Mystere); // récupère le mot a la ligne spécifié via le nombre aléatoire
fclose(pendu);
Count_And_Hide(mot_Mystere, mot_Mystere_Cache); // compte les lettres et cache le mot en fonctions du nombre de lettre en mettant des '*'
/* ------------------------------------------------- */
printf("[%d] // [%s] // [%s]", mot_Aleatoire_Numero, mot_Mystere, mot_Mystere_Cache); // TEST
}
word.c : // contient mes fonctions
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TABLEAU_MAX 1000
void Creation_Liste_Mot(void) // création des mots dans le .txt
{
FILE *pendu = fopen("MOT_PENDU.txt", "w");
fputs("COUSCOUS\n", pendu);
fputs("SUCETTE\n", pendu);
fputs("MARRON\n", pendu);
rewind(pendu); // reset pour la fonction suivante (Combien_Mot)
fclose(pendu);
}
int Combien_Mot ( FILE *fichier )
{
int i = 0;
unsigned char j[1000];
while (fgets(j, 1000, fichier) != NULL)
{
i++;
}
rewind(fichier); // reset pour la fonction suivante (Prend_Mot_Ligne_)
return i;
}
void Prend_Mot_Ligne_ (int rand, FILE* fichier, char *mot)
{
int i = 0;
for ( i = 0 ; i < rand ; i++)
fgets(mot, TABLEAU_MAX, fichier);
rewind(fichier);
}
void Count_And_Hide ( char mot_A_Cacher[], char *mot_Cache )
{
int i = 0;
int longueur = 0;
longueur = strlen(mot_A_Cacher);
for ( i = 0; i < longueur - 1; i++)
mot_Cache[i] = '*';
}
je ne vous mes pas mon word.h car elle ne contient que les prototypes.
Comment fait main.c pour connaitre le prototype des fonction de word.c que tu utilises ?
Il faut lire et corriger les warnings !
joel76 a écrit:
Pourquoi i < longueur - 1 à la ligne 52 de word.c ?
C'est pour enlever le '\n' de fin de ligne. (fgets le met dans la chaîne de caractères).
- Edité par rouloude il y a environ 1 heure
C'est vrai ca ! Je ne sais pas comment mon code a fait pour marcher jusqu'à la..... J'ai rajouté le #include "word.h" et du coup plus rien ne fontionne... yes
robun a écrit:
Peut-être que c'est parce que tu n'ajoutes pas le caractère nul de fin de chaîne lorsque tu construis mot_Cache ?
Les 2 autres mots fonctionne très bien, c'est juste le fait qu'un mot fasse 8 caracteres ou non qui bloque, mais depuis que j'ai ajouté le include, plus rien ne marche..
- Edité par MelvinSawada 8 juillet 2019 à 12:48:00
Peut-être que c'est parce que tu n'ajoutes pas le caractère nul de fin de chaîne lorsque tu construis mot_Cache ?
Les 2 autres mots fonctionne très bien, c'est juste le fait qu'un mot fasse 8 caracteres ou non qui bloque, mais depuis que j'ai ajouté le include, plus rien ne marche..
OK admettons que ça marchait. Mais es-tu d'accord que c'est une erreur d'oublier le caractère nul de fin de chaîne ? Si tu es d'accord, il faut corriger cette erreur, peu importe que le programme marche ou pas (le fait qu'un programme marche ne prouve pas qu'il n'y a pas d'erreurs dedans !). De toute façon ton programme ne marche pas. Et il y a des chances que c'est cet oubli qui cause le problème.
(Tu as un problème dont tu ne vois pas la cause, on te propose une piste basée sur une réelle erreur de programmation, à mon avis il faut essayer...)
Peut-être que c'est parce que tu n'ajoutes pas le caractère nul de fin de chaîne lorsque tu construis mot_Cache ?
Les 2 autres mots fonctionne très bien, c'est juste le fait qu'un mot fasse 8 caracteres ou non qui bloque, mais depuis que j'ai ajouté le include, plus rien ne marche..
OK admettons que ça marchait. Mais es-tu d'accord que c'est une erreur d'oublier le caractère nul de fin de chaîne ? Si tu es d'accord, il faut corriger cette erreur, peu importe que le programme marche ou pas (le fait qu'un programme marche ne prouve pas qu'il n'y a pas d'erreurs dedans !). De toute façon ton programme ne marche pas. Et il y a des chances que c'est cet oubli qui cause le problème.
(Tu as un problème dont tu ne vois pas la cause, on te propose une piste basée sur une réelle erreur de programmation, à mon avis il faut essayer...)
Non non, je ne passe pas outre le fait que j'ai oublié le caractère '\0' a la fin, mais je cherche à comprendre pourquoi mon programme marchais sans prototype, et qu'il ne marche plus avec.. Je vais essayé de refaire ma fonction en mettant le caractere en question !
Merci de vos réponses rapide !
PS : j'ai modifié mon code et rajouté un '\0' a la fin, mais il ne marche que quand j'enleve le #include "word.h" ....
- Edité par MelvinSawada 8 juillet 2019 à 15:33:07
PS : Purée mais qu'est ce que je ferais sans vous sans déconner.... J'ai trouvé ! dans le prototype : void Count_And_Hide ( char mot_A_Cacher, char* mot_Cache); j'ai oublié de mettre les crochets pour indiquer que c'est un tableau qu'il recoit, et non pas une lettre....
Excusez mon incompétence absolue svp :((
en tout cas je vous remercie mille fois d'avoir pris votre temps pour m'aider !!!
- Edité par MelvinSawada 8 juillet 2019 à 16:13:28
bug ?
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le crayon la gomme et le papier sont les meilleurs outils du programmeur !
En recherche d'emploi.