bonjours, tous le monde j'ai fini le TP sur le pendu et j'aurais voulu avoir des avis sur le programme que j'ai fais svp
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
char lireCaractere();
int main(int argc, char *argv[])
{
char *word[] = {"MARRON", "BATEAU", "VILLE", "ANIMAUX", "ABEILLE", "ARBRE", "FEUILLE", "AIGUILLE", "ORDINATEUR", "FAUTEUILLE"};
char *wordCopy = NULL;
char *wordFind = NULL;
char letter = 0;
char *letterFind = NULL;
int h = 0;
int life = 10;
int sizeString = 0;
int replay = 0;
int MAX = 10;
printf("Welcome, you go are playing Pendu.\n\n");
printf("Manual:\n");
printf("the word a find is in capital letters,\n");
printf("You have 10 life.");
do
{ srand(time(NULL));
h = (rand() % MAX);
wordCopy = word[h];
sizeString = strlen(wordCopy);
wordFind = malloc(sizeString * sizeof(char));
for (int i = 0; i < sizeString; i++)
wordFind[i] = '*';
printf("\n\nWord to finded : %s", wordFind);
do
{
printf("\nchoose a letter: ");
letter = lireCaractere();
letterFind = strchr(wordCopy, letter);
for(int i = 0; i < *wordCopy; i++)
{
if (letter == wordCopy[i])
{
wordFind[i] = letter;
}
}
if (letterFind != NULL)
{
printf("%s\n", wordFind);
}else
{
life --;
printf("\nYou have %d life left.\n", life);
printf("%s\n", wordFind);
}
} while (strcmp(wordFind, wordCopy) != 0 && life > 0);
if (strcmp(wordFind, wordCopy) == 0)
{
printf("\nGreat, you have win!!!");
}else
{
printf("\nYou have lose but it's OK. the word is %s.", wordCopy);
}
printf("\n\nWant you replay (0)yes or (1)no ? ");
scanf("%d", &replay);
life = 10;
}while (replay != 1);
free(wordFind);
return 0;
}
char lireCaractere()
{
char caractere = 0;
caractere = getchar();
caractere = toupper(caractere);
while (getchar() != '\n') ;
return caractere;
}
ps: j'ai essayer avec la bibliothèque de que Matheo a fais dans le cours mais quand j'initialise le mot à trouver sa m'affiche d'autre mot que celui qui a bien été choisis
Tu as des soucis à te faire avec wordFind: tu oublies de réserver de la place pour le \0 final, et évidemment d'y mettre ce \0. En soi, ce ne serait pas grave si tu n'utilisais pas des fonctions qui se basent sur ce \0 pour savoir si le string est terminé, telles que strcmp() et printf() (avec un format %s)
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
En C "plop" contient 4 caractère + 1 caractère de fin de chaines. (il y a donc 5 caractères en tout)
C'est grâce à ce fameux caractère que tu n'as pas à passer le nombre de caractères aux fonctions.
sizeString = strlen(wordCopy);
wordFind = malloc(sizeString * sizeof(char));//non
//correction
sizeString = strlen(wordCopy);
wordFind = malloc((sizeString+1) * sizeof(char));
//Penser à vérifier que le malloc a réussi
wordFind[sizeString]='\0';//on place ce fameux caractère de fin de chaine
Mais ce que je comprend maintenant c'est pourquoi quand je le code a Matheo sa ne fonctionne pas sa me donne sa:
Welcome, you go are playing Pendu.
Manual: the word a find is in capital letters, You have 10 life.
Word to finded : ******BOAT HOUSE SPARRINQ choose a letter:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#include <time.h>
#include "dico.h"
char lireCaractere();
int main(int argc, char *argv[])
{
char word[100] = {0};
char *wordCopy = NULL;
char *wordFind = NULL;
char letter = 0;
char *letterFind = NULL;
int life = 10;
int sizeString = 0;
int replay = 0;
printf("Welcome, you go are playing Pendu.\n\n");
printf("Manual:\n");
printf("the word a find is in capital letters,\n");
printf("You have 10 life.");
do
{ if (!piocherMot(word))
exit(0);
wordCopy = word;
sizeString = strlen(wordCopy);
wordFind = malloc((sizeString + 1) * sizeof(char));
if (wordFind == NULL)
exit(0);
for (int i = 0; i < sizeString; i++)
wordFind[i] = '*';
printf("\n\nWord to finded : %s", wordFind);
ps: les mot que j'ai mit dans la bibliothèque ne sont pas les mêmes
N'aurais-tu pas oublier de set ton caractère de fin de chaine ? Car, il est possible qu'en l'oubliant , printf aille trop loin et te lis la suite de ce qu tu as en mémoire :(
× 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.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent