Pouvez m'aider à faire le programme d'un jeu de pendu?

Résolu/Fermé
LisaRita - Modifié le 4 mai 2022 à 07:13
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 - 3 mai 2022 à 20:28
Bonjour,

J'ai essayé de faire le programme d'un jeu de pendu avec l'aide des sites ayant déjà mis les programmes puis j'ai modifié certaines choses de ces programmes du coup j'ai compiler sur le terminal mais j'ai plein d'erreur dont je n'ai pas compris veuillez bien m'éclairer ces points. (Je suis vraiment nulle en programmation :( )
Merci à celles et ceux qui répondent et m'aident.

#include <stdio.h>


char lirechaine();



int main()
{

char motàdeviner[] = "Programmation" ;
int nbrCoups = 20;
char lettre = ' ';
char *pointeur = NUL;
char chaineàdeviner[] = "*************";
int i;



  printf("Le pendu \n \n \n \n");

  printf("il vous reste %d coups \n",nbrCoups);
printf("quel est le mot secret %s \n",chaineàdeviner);
printf("entrez une lettre \n \n");


while((nbrCoups != 0) && (strcmp(chaineàdeviner,motàdeviner)!= 0 ) )

{


lettre = lirechaine();

pointeur = strchr(motàdeviner,lettre);


if(pointeur == NULL)
{

   nbrCoups -- ;
   printf("il vous reste %d coups \n",nbrCoups);
   printf("quel est le mot secret %s \n",chaineàdeviner);
   printf("entrez une lettre \n");

}

else
{

for(i=0 ; i<strlen(motàdeviner) ; i++)
{


    if(lettre == motàdeviner[i])
 {
  chaineàdeviner[i] = lettre;
     }


} //fin for




} // fin else


} // fin de la boucle

if( strcmp(chaineàdeviner,motàdeviner)== 0 )
{
    printf(" vous avez gagne le mot etait bien %s \n",motàdeviner);
}

else if (nbrCoups == 0)
{
 printf(" vous avez perdu \n ");
}



    return 0;
}




char lirechaie()
{
    char chaine = 0;

    chaine = getchar();
    chaine= toupper(chaine);


    while (getchar() != '\n') ;

    return chaine;

} 
A voir également:

2 réponses

[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié le 1 mai 2022 à 18:13
Salut,

1.

En C, tu n'as pas le droit de mettre des lettres accentuées comme noms de variables. Un très grand nombre des erreurs concernent cela.

Renomme "motàdeviner" en "motadeviner" et "chaineàdeviner" en "chaineadeviner" partout.

2.

Une fois que tu as fait cela, tu as les erreurs et avertissements suivants qui s'affichent :

$ gcc -Wall -Wextra 37584157.c
37584157.c: In function ‘main’:
37584157.c:14:18: error: ‘NUL’ undeclared (first use in this function); did you mean ‘NULL’?
char *pointeur = NUL;
^~~
NULL
37584157.c:14:18: note: each undeclared identifier is reported only once for each function it appears in
37584157.c:27:27: warning: implicit declaration of function ‘strcmp’ [-Wimplicit-function-declaration]
while((nbrCoups != 0) && (strcmp(chaineadeviner,motadeviner)!= 0 ) )
^~~~~~
37584157.c:34:12: warning: implicit declaration of function ‘strchr’ [-Wimplicit-function-declaration]
pointeur = strchr(motadeviner,lettre);
^~~~~~
37584157.c:34:12: warning: incompatible implicit declaration of built-in function ‘strchr’
37584157.c:34:12: note: include ‘<string.h>’ or provide a declaration of ‘strchr’
37584157.c:2:1:
+#include <string.h>

37584157.c:34:12:
pointeur = strchr(motadeviner,lettre);
^~~~~~
37584157.c:50:13: warning: implicit declaration of function ‘strlen’ [-Wimplicit-function-declaration]
for(i=0 ; i<strlen(motadeviner) ; i++)
^~~~~~
37584157.c:50:13: warning: incompatible implicit declaration of built-in function ‘strlen’
37584157.c:50:13: note: include ‘<string.h>’ or provide a declaration of ‘strlen’
37584157.c:50:12: warning: comparison of integer expressions of different signedness: ‘int’ and ‘long unsigned int’ [-Wsign-compare]
for(i=0 ; i<strlen(motadeviner) ; i++)
^
37584157.c: In function ‘lirechaie’:
37584157.c:93:13: warning: implicit declaration of function ‘toupper’ [-Wimplicit-function-declaration]
chaine= toupper(chaine);
^~~~~~~
  • le premier message est un message d'erreur. Tu as oublié un L à la fin de NULL, que le message te suggère d'ajouter
  • les autres messages t'indiquent que tu as oublié de faire
    #include <string.h>
    qui te permet d'accéder aux fonctions de la bibliothèque standard mentionnées dans les avertissements (strcmp(), strchr(), strlen()) et
    #include <ctype.h>
    (pour toupper())


Les avertissements de gcc dans une version raisonnablement récente te donnent ces indications. Fais le.

3.

Une fois que tu as corrigé il te reste :

$ gcc -Wall -Wextra 37584157.c
37584157.c: In function ‘main’:
37584157.c:52:12: warning: comparison of integer expressions of different signedness: ‘int’ and ‘size_t’ {aka ‘long unsigned int’} [-Wsign-compare]
for(i=0 ; i<strlen(motadeviner) ; i++)
^
/usr/bin/ld: /tmp/ccpELaFD.o: in function `main':
37584157.c:(.text+0xa3): undefined reference to `lirechaine'
collect2: error: ld returned 1 exit status


4.

Le premier message est un avertissement, qui te signale qu'en ligne 52, tu compares un entier à un type size_t, :

for(i=0 ; i<strlen(motadeviner) ; i++)


En effet, strlen() renvoie un type size_t qui est un type entier non signé alors que i est déclarée au début de ton main() comme étant un int, qui est un type signé. De plus, size_t peut représenter des valeurs entières (positives) bien que plus grandes de int.

Cet avertissement n'empêchera pas le programme de fonctionner tant que des valeurs tenant dans un int résulteront de strlen(), mais tu devrais écrire :

for(size_t i=0 ; i<strlen(motadeviner) ; i++)


et supprimer la déclaration de ta variable
int i;
au début de ton main() pour éliminer cette incohérence des types.

5.

La dernière erreur n'est pas une erreur de compilation, mais de liaison.

Tu définis en ligne 6 le prototype d'une fonction lirechaine(), que tu appelles en ligne 34, mais son implémentation n'est faite nulle part dans les éléments compilés.

Tu dois donc implémenter cette fonction.

Je pense aussi que la fonction est mal nommée car elle retourne un char et pas une chaine.


Pour le reste, je n'ai pas regardé la logique du code et s'il s'exécute correctement :-)

Dal

P.S. en fait, je vois qu'il y a une fonction
char lirechaie()
implémentée dans le code. Il manque une lettre pour que le compilateur sache de quoi tu parles.

P.S. n°2 : je pense que ton mot à trouver devrait être tout en majuscules.
1
Salut,
Je te remercie énormément pour ton aide cela m'a beaucoup aider.

Rita
1
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
3 mai 2022 à 20:28
:-)
0