Expliquez moi mes erreurs de mon programme de devinette.
Fermé
LisaRita
-
4 mai 2022 à 23:50
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 5 mai 2022 à 21:00
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 - 5 mai 2022 à 21:00
A voir également:
- Expliquez moi mes erreurs de mon programme de devinette.
- Programme demarrage windows 10 - Guide
- Erreur de téléchargement - 0x80070643 - Accueil - Windows
- Désinstaller programme windows 10 - Guide
- Programme démarrage windows 10 - Guide
5 réponses
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 5 mai 2022 à 10:24
Modifié le 5 mai 2022 à 10:24
Salut LisaRita,
Je t'ai déjà montré la méthode pour utiliser les messages d'erreurs et avertissements fournis par le compilateur.
https://forums.commentcamarche.net/forum/affich-37584157-pouvez-m-aider-a-faire-le-programme-d-un-jeu-de-pendu
1. tu prends connaissance du premier sur la liste, tu le comprends, tu corrige ton code
2. tu recompiles et tu boucles sur 1. tant que tu as des messages d'erreurs ou avertissements
3. ton code compile proprement, il te reste à en tester le fonctionnement pour vérifier qu'il fait ce que tu penses qu'il devrait faire
Essaye.
Pour comprendre le message d'erreur ou avertissement, si tu ne le comprends pas immédiatement au vu du message et en analysant le code auquel il se réfère, vas voir ton cours, ton manuel de C ou un document de référence sur le C, sur les instructions concernées par le message, pour t'aider à comprendre ce que tu ne fais pas correctement.
Le compilateur est ton ami et avec cette méthode, tu vas apprendre par toi même.
Si, après avoir fait ce travail, il y a un message que tu ne comprends pas et que tu ne sais pas résoudre, poste ce message sur le forum avec les lignes de code qu'il concerne avec suffisamment de contexte du programme pour le reproduire et on t'aidera à le comprendre.
Cependant, le compilateur ne remplacera pas une bonne compréhension de la base du langage C, et il ne va pas non plus te signaler les erreurs de logique dans ton code (par exemple il ne te dira pas que tu déclares une variable nbrCoups, mais que tu ne fais jamais varier la valeur qu'elle contient)..
Quelques observations de problèmes qui sautent aux yeux dans ton code et relèvent de choses de base en C :
Dal
Je t'ai déjà montré la méthode pour utiliser les messages d'erreurs et avertissements fournis par le compilateur.
https://forums.commentcamarche.net/forum/affich-37584157-pouvez-m-aider-a-faire-le-programme-d-un-jeu-de-pendu
1. tu prends connaissance du premier sur la liste, tu le comprends, tu corrige ton code
2. tu recompiles et tu boucles sur 1. tant que tu as des messages d'erreurs ou avertissements
3. ton code compile proprement, il te reste à en tester le fonctionnement pour vérifier qu'il fait ce que tu penses qu'il devrait faire
Essaye.
Pour comprendre le message d'erreur ou avertissement, si tu ne le comprends pas immédiatement au vu du message et en analysant le code auquel il se réfère, vas voir ton cours, ton manuel de C ou un document de référence sur le C, sur les instructions concernées par le message, pour t'aider à comprendre ce que tu ne fais pas correctement.
Le compilateur est ton ami et avec cette méthode, tu vas apprendre par toi même.
Si, après avoir fait ce travail, il y a un message que tu ne comprends pas et que tu ne sais pas résoudre, poste ce message sur le forum avec les lignes de code qu'il concerne avec suffisamment de contexte du programme pour le reproduire et on t'aidera à le comprendre.
Cependant, le compilateur ne remplacera pas une bonne compréhension de la base du langage C, et il ne va pas non plus te signaler les erreurs de logique dans ton code (par exemple il ne te dira pas que tu déclares une variable nbrCoups, mais que tu ne fais jamais varier la valeur qu'elle contient)..
Quelques observations de problèmes qui sautent aux yeux dans ton code et relèvent de choses de base en C :
- une variable de type char ne peut contenir qu'un char, pas une chaîne de caractères, revois le chapitre sur les chaînes de caractères en C
- pour comparer deux chaînes de caractères on utilise strcmp() en C, pas les opérateurs ==, != et encore moins =
- les chaînes en C sont délimitées par des " (guillemets) et pas par des ' (apostrophes), ce sont les char seuls qui sont entre apostrophes (exemple
char lettre_a = 'a';
) - tes if sont mal formés, revois la syntaxe des if / else
Dal
jordane45
Messages postés
38292
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
5 mai 2022 à 00:27
5 mai 2022 à 00:27
Bonjour
Je ne réponds pas aux questions concernant la programmation en c.... Mais je pense que si tu indiquais les messages d'erreur que tu rencontres cela faciliterait grandement la résolution de ton soucis...
Je ne réponds pas aux questions concernant la programmation en c.... Mais je pense que si tu indiquais les messages d'erreur que tu rencontres cela faciliterait grandement la résolution de ton soucis...
LisaRita
Messages postés
5
Date d'inscription
jeudi 5 mai 2022
Statut
Membre
Dernière intervention
5 mai 2022
Modifié le 5 mai 2022 à 18:48
Modifié le 5 mai 2022 à 18:48
Bonjour,
Je te remercie pour ta réponse,voici mes erreurs:
Je te remercie pour ta réponse,voici mes erreurs:
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 5 mai 2022 à 19:00
Modifié le 5 mai 2022 à 19:00
Le premier message indique que tu as mis des mots clefs à la suite de ton
Une fois le premier message traité, recompile. Tu verras que le 2ème message que tu postes dans ta capture aura disparu, car l'erreur signalée était la conséquence du problème ayant généré le premier message d'avertissement. Il y en aura peut-être un autre, que tu devras traiter à son tour, etc. A chaque fois, traite seulement le premier message.
Note que ce code ne correspond pas à celui que tu as posté initialement et qui allait à la ligne.
Quel est ton support d'apprentissage du C (livre, cours,...) ?
#include <stdio.h>en écrivant
#include <stdio.h> int main()sur une seule ligne ...
- tu ne dois rien écrire à la suite de ta directive d'inclusion
- tu dois écrire la suite de ton code sur une nouvelle ligne
#include <stdio.h> int main() /* suite */
Une fois le premier message traité, recompile. Tu verras que le 2ème message que tu postes dans ta capture aura disparu, car l'erreur signalée était la conséquence du problème ayant généré le premier message d'avertissement. Il y en aura peut-être un autre, que tu devras traiter à son tour, etc. A chaque fois, traite seulement le premier message.
Note que ce code ne correspond pas à celui que tu as posté initialement et qui allait à la ligne.
Quel est ton support d'apprentissage du C (livre, cours,...) ?
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
>
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
Modifié le 5 mai 2022 à 19:00
Modifié le 5 mai 2022 à 19:00
Note que tu n'as pas besoin de faire une capture. Tu peux faire un copier-coller du contenu de ta console (ce qui te permettra d'enlever les éléments identifiant le nom d'utilisateur que tu ne veux pas poster).
Un autre conseil : lorsque tu écris un code, écris quelques lignes simples et compile et teste souvent. N'attends pas d'avoir écrit des dizaines ou centaines de lignes pour le faire.
Un autre conseil : lorsque tu écris un code, écris quelques lignes simples et compile et teste souvent. N'attends pas d'avoir écrit des dizaines ou centaines de lignes pour le faire.
LisaRita
Messages postés
5
Date d'inscription
jeudi 5 mai 2022
Statut
Membre
Dernière intervention
5 mai 2022
>
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
5 mai 2022 à 19:09
5 mai 2022 à 19:09
merci beaucoup pour tes précieux conseils ;)
LisaRita
Messages postés
5
Date d'inscription
jeudi 5 mai 2022
Statut
Membre
Dernière intervention
5 mai 2022
>
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
5 mai 2022 à 19:10
5 mai 2022 à 19:10
Des cours.
LisaRita
Messages postés
5
Date d'inscription
jeudi 5 mai 2022
Statut
Membre
Dernière intervention
5 mai 2022
5 mai 2022 à 19:01
5 mai 2022 à 19:01
/Documents/projet/Devinette.c -o Réponse
/Users/Documents/projet/Devinette.c:13:43: warning: multi-character character constant [-Wmultichar]
if (devinetteadeviner == 'un livre.' ) {
^
/Users//Documents/projet/Devinette.c:13:43: warning: character constant too long for its type
/Users/Documents/projet/Devinette.c:16:63: warning: multi-character character constant [-Wmultichar]
printf("un livre."); if (devinetteadeviner = 'un livre.')
^
/Users/Documents/projet/Devinette.c:16:63: warning: character constant too long for its type
/Users/Documents/projet/Devinette.c:16:61: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
printf("un livre."); if (devinetteadeviner = 'un livre.')
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
/Users/Devinette.c:16:61: note: place parentheses around the assignment to silence this warning
printf("un livre."); if (devinetteadeviner = 'un livre.')
^
( )
/Users/Devinette.c:16:61: note: use '==' to turn this assignment into an equality comparison
printf("un livre."); if (devinetteadeviner = 'un livre.')
^
==
/Users/Documents/projet/Devinette.c:17:17: error: expected statement
}
^
/Users/Documents/projet/Devinette.c:18:17: error: expected expression
else ( lareponsedeladevinette != 'un livre.'); printf("Ce n'est pas la réponse.\n");
^
/Users/Documents/projet/Devinette.c:19:40: warning: more '%' conversions than data arguments [-Wformat-insufficient-args]
printf("Il vous reste %c coups\n"),nbrCoups");
~^
/Users/Documents/projet/Devinette.c:19:60: warning: missing terminating '"' character [-Winvalid-pp-token]
printf("Il vous reste %c coups\n"),nbrCoups");
^
/Users/Documents/projet/Devinette.c:19:60: error: expected ';' after expression
printf("Il vous reste %c coups\n"),nbrCoups");
^
;
/Users/Documents/projet/Devinette.c:19:52: warning: expression result unused [-Wunused-value]
printf("Il vous reste %c coups\n"),nbrCoups");
^~~~~~~~
/Users/Documents/projet/Devinette.c:19:60: error: expected expression
printf("Il vous reste %c coups\n"),nbrCoups");
^
/Usersi/Documents/projet/Devinette.c:36:6: error: expected 'while' in do/while loop
}
^
/Users/Documents/projet/Devinette.c:5:8: note: to match this 'do'
do {
^
/Usersr/Documents/projet/Devinette.c:36:6: error: expected '}'
}
^
/Users/Documents/projet/Devinette.c:4:5: note: to match this '{'
{
^
/Users/Documents/projet/Devinette.c:13:39: warning: result of comparison of constant 1987208494 with expression of type 'char' is always false [-Wtautological-constant-out-of-range-compare]
if (devinetteadeviner == 'un livre.' ) {
~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~
/Users/Documents/projet/Devinette.c:16:63: warning: implicit conversion from 'int' to 'char' changes value from 1987208494 to 46 [-Wconstant-conversion]
printf("un livre."); if (devinetteadeviner = 'un livre.')
~ ^~~~~~~~~~~
10 warnings and 6 errors generated.
/Users/Documents/projet/Devinette.c:13:43: warning: multi-character character constant [-Wmultichar]
if (devinetteadeviner == 'un livre.' ) {
^
/Users//Documents/projet/Devinette.c:13:43: warning: character constant too long for its type
/Users/Documents/projet/Devinette.c:16:63: warning: multi-character character constant [-Wmultichar]
printf("un livre."); if (devinetteadeviner = 'un livre.')
^
/Users/Documents/projet/Devinette.c:16:63: warning: character constant too long for its type
/Users/Documents/projet/Devinette.c:16:61: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
printf("un livre."); if (devinetteadeviner = 'un livre.')
~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~
/Users/Devinette.c:16:61: note: place parentheses around the assignment to silence this warning
printf("un livre."); if (devinetteadeviner = 'un livre.')
^
( )
/Users/Devinette.c:16:61: note: use '==' to turn this assignment into an equality comparison
printf("un livre."); if (devinetteadeviner = 'un livre.')
^
==
/Users/Documents/projet/Devinette.c:17:17: error: expected statement
}
^
/Users/Documents/projet/Devinette.c:18:17: error: expected expression
else ( lareponsedeladevinette != 'un livre.'); printf("Ce n'est pas la réponse.\n");
^
/Users/Documents/projet/Devinette.c:19:40: warning: more '%' conversions than data arguments [-Wformat-insufficient-args]
printf("Il vous reste %c coups\n"),nbrCoups");
~^
/Users/Documents/projet/Devinette.c:19:60: warning: missing terminating '"' character [-Winvalid-pp-token]
printf("Il vous reste %c coups\n"),nbrCoups");
^
/Users/Documents/projet/Devinette.c:19:60: error: expected ';' after expression
printf("Il vous reste %c coups\n"),nbrCoups");
^
;
/Users/Documents/projet/Devinette.c:19:52: warning: expression result unused [-Wunused-value]
printf("Il vous reste %c coups\n"),nbrCoups");
^~~~~~~~
/Users/Documents/projet/Devinette.c:19:60: error: expected expression
printf("Il vous reste %c coups\n"),nbrCoups");
^
/Usersi/Documents/projet/Devinette.c:36:6: error: expected 'while' in do/while loop
}
^
/Users/Documents/projet/Devinette.c:5:8: note: to match this 'do'
do {
^
/Usersr/Documents/projet/Devinette.c:36:6: error: expected '}'
}
^
/Users/Documents/projet/Devinette.c:4:5: note: to match this '{'
{
^
/Users/Documents/projet/Devinette.c:13:39: warning: result of comparison of constant 1987208494 with expression of type 'char' is always false [-Wtautological-constant-out-of-range-compare]
if (devinetteadeviner == 'un livre.' ) {
~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~
/Users/Documents/projet/Devinette.c:16:63: warning: implicit conversion from 'int' to 'char' changes value from 1987208494 to 46 [-Wconstant-conversion]
printf("un livre."); if (devinetteadeviner = 'un livre.')
~ ^~~~~~~~~~~
10 warnings and 6 errors generated.
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
5 mai 2022 à 19:12
5 mai 2022 à 19:12
OK, maintenant le 1er message est celui-ci :
Peux-tu reposter le code correspondant à cette erreur tel que tu l'as maintenant ?
Je t'ai déjà donné les indications sur le type char et les délimiteurs dans mon premier message : ici.
J'ignore comment tu les a appliquées.
En tout cas
/Documents/projet/Devinette.c -o Réponse
/Users/Documents/projet/Devinette.c:13:43: warning: multi-character character constant [-Wmultichar]
if (devinetteadeviner == 'un livre.' ) {
^
Peux-tu reposter le code correspondant à cette erreur tel que tu l'as maintenant ?
Je t'ai déjà donné les indications sur le type char et les délimiteurs dans mon premier message : ici.
J'ignore comment tu les a appliquées.
En tout cas
'un livre.'est erroné syntaxiquement, et j'ai déjà expliqué pourquoi.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
LisaRita
Messages postés
5
Date d'inscription
jeudi 5 mai 2022
Statut
Membre
Dernière intervention
5 mai 2022
Modifié le 5 mai 2022 à 19:21
Modifié le 5 mai 2022 à 19:21
voici le code qui correspond à l'erreur :
scanf("%c",&devinetteadeviner);
if ((strcmp(devinetteadeviner == "un livre.")
{
Et je suis entrain de corriger le code je le poste après avoir terminer de les corriger.
Mince j'ai envoyé la modification le code à la base était if (devinetteadeviner == 'un livre.')
scanf("%c",&devinetteadeviner);
if ((strcmp(devinetteadeviner == "un livre.")
{
Et je suis entrain de corriger le code je le poste après avoir terminer de les corriger.
Mince j'ai envoyé la modification le code à la base était if (devinetteadeviner == 'un livre.')
[Dal]
Messages postés
6194
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
11 octobre 2024
1 092
Modifié le 5 mai 2022 à 21:06
Modifié le 5 mai 2022 à 21:06
ok, et quel est le type de la variable
en ce qui concerne strcmp() cette fonction ne fonctionne pas comme tu l'écris et tu as 3 parenthèses ouvrantes et une seule fermante.
Pour savoir comment utiliser une fonction la bibliothèque standard du langage C, réfère toi à sa documentation :
https://www.cplusplus.com/reference/cstring/strcmp/
cette fonction :
tu ne peux pas juste faire les chose "au hasard"
devinetteadeviner, l'as-tu modifié de sorte qu'il puisse accueillir une chaîne de caractères comme je le signalais ?
en ce qui concerne strcmp() cette fonction ne fonctionne pas comme tu l'écris et tu as 3 parenthèses ouvrantes et une seule fermante.
Pour savoir comment utiliser une fonction la bibliothèque standard du langage C, réfère toi à sa documentation :
https://www.cplusplus.com/reference/cstring/strcmp/
cette fonction :
- comporte 2 arguments séparés par des virgules, qui doivent être deux pointeurs vers char pointant vers des chaînes C
- le résultat de cette fonction est 0 si les chaînes sont identiques
- cette fonction de la bibliothèque standard est accessible en faisant un
#include <string.h>
tu ne peux pas juste faire les chose "au hasard"