TutorielsVous débutez ? C'est ici qu'on commence !
Mon compte
Recherche
Livre d'or
PublicitéVous devez être inscrit pour pouvoir poster des messages
Le problème de ce sujet a été résolu
| Page : 1 | |||||||
| Auteur | Message | ||||||
|---|---|---|---|---|---|---|---|
| 1 visiteur sur ce sujet (1 anonyme) | |||||||
| Page : 1 | |||||||
bjarni3000
|
# Posté le 18/07/2008 à 23:45:57 | ||||||
|
Groupe : Membres |
Bonsoir,
j'ai suivi le cours de M@teo sur le langage C mais je coince au pendu(première partie, sans l'utilisation du dictionnaire). J'ai regardé la solution mais il utilise les booléens alors que moi j'ai utilisé un autre tableau différemment. J'ai deux problèmes différents avec ce code: - il faut que je tape deux fois la première lettre juste du pendu pour qu'elle soit considérée comme correcte. - le logiciel ne comprend pas que la solution a été trouvée à la fin... Voilà donc si quelqu'un pouvait m'expliquer ce qui cloche dans ce programme ce serait super parce que moi là je vois pas...ça doit être une faute évidente mais je la vois pas voilà le code du main: Secret (cliquez pour afficher) Code : C
Voilà le fichier de fonctions: Secret (cliquez pour afficher) Code : C
Et voilà le fichier de headers: Secret (cliquez pour afficher) Code : C
Voilà j'espère que la présentation va sinon dites le moi je corrigerai.
Édité
le 18/07/2008 à 23:46:49
par bjarni3000
|
||||||
etrange02
|
# Posté le 18/07/2008 à 23:57:00 | ||||||
Pourquoi, il en faut une?![]() Groupe : Membres |
Il y a un truc que je ne comprends pas : pourquoi fais-tu des pointeurs si tu ne modifie les chaînes pointées dans ta fonction asterix() ?
P.S.: Si tu ne sens pas que les fonctions sont pratiques pour toi, ne les utilisent pas. Attend d'avoir un programme qui fonctionne pour ensuite le découper en fonction. Aussi, va doucement. Tu n'arriveras à rien si tu code tout d'un seul coup. Ton programme ne fonctionne pas et tu as déjà fait une fonction niveau. Garde-la pour la suite en amélioration. Et il manque un return donc prends ton temps (il se place en fin de fonction). Rome ne s'est pas faite en un jour. J'en ai marre des édits !
Édité
le 19/07/2008 à 00:03:53
par etrange02
Pas de fautes d'orthographe s'il vous plaît et un peu de respect pour la syntaxe |
||||||
bjarni3000
|
# Posté le 19/07/2008 à 22:22:45 | ||||||
|
Groupe : Membres |
En effet j'avais oublié un return...ou plutôt un exit pour le printf du message d'erreur. Ben en faite je suis resté un moment à chercher pourquoi y avait ces problèmes et j'ai rajouté des trucs en même temps comme le niveau de difficulté, ça au moins j'étais sûr que ça fonctionnait ^^. Pour la manière donc j'ai fractionné mon code en fonction, au début j'avais tout fait d'un bloc puis j'ai fragmenté pour que ce soit plus clair et pouvoir mieux trouver les erreurs que j'obtiens...
Pour la fonction asterix...je comprend pas le problème avec le pointeur...on modifie quand même un des tableaux si la lettre correspond donc on doit passer par là non? Bref suis un débutant donc ça doit être des erreurs grossières mais je les vois pas. Est-ce que quelqu'un verrait ce qui crée mes deux problèmes? |
||||||
etrange02
|
# Posté le 19/07/2008 à 22:57:45 | ||||||
Pourquoi, il en faut une?![]() Groupe : Membres |
Lorsque tu écrit pointeur[1] = quelque_chose, c'est la case sur laquelle le pointeur pointe. En revanche, *ponteur[1] te donnes la valeur de la variable.
Pour faire simple : - variable -> valeur de la variable - &varaible -> adresse de la variable - pointeur -> valeur du pointeur <=> adresse de la variable - *pointeur -> valeur de la variable se trouvant à cette adresse <=> valeur de la variable Donc : *pointeur = variable pointeur = &variable En espérant que cela t'aide un peu ! Personnellement, je créerai une chaine contenant les caractères découverts et les étoiles comme M*RRO* (pour marron). Ensuite, à l'aide d'une boucle du vérifie si tous les caractères sont découverts. Pour le reste, je cherche ![]() Il faut que tu saches aussi que lorsqu'une fonction se termine, les variables qui sont incluses dedans sont supprimées à moins de leurs donner un type particulier (je crois que c'est static mais vérifie toujours dans le tuto ).Dans la fonction main() je te conseil d'utiliser un while à la place du for. Car si je trouve le mot secret en trois coups, je continuerai toujours le jeu alors qu'il est sensé être terminé.
Édité
le 19/07/2008 à 23:20:23
par etrange02
Pas de fautes d'orthographe s'il vous plaît et un peu de respect pour la syntaxe |
||||||
bjarni3000
|
# Posté le 20/07/2008 à 01:19:08 | ||||||
|
Groupe : Membres |
Hello,
je mélange encore souvent les choses sur les pointeurs c'est vrai mais tableau[0] n'est-il pas égal à *tableau. Enfin me semblait avoir vu ça à qq part dans le cours après je peux confondre. Pourtant ça marche quand même la fonction asterix...enfin j'ai trouvé ce qui clochait, ça avait déjà été posé en question sur le forum en faite. C'est dû à mon scanf dans la fonction niveau, j'ai pas vidé le buffer... J'ai fait la modif que t'as dites mais bof pas de résultat différent. Je pourrais faire une boucle en effet pour comparer les résultats mais arriverais-tu à m'expliquer pourquoi la fonction gagnerPerdre ne fonctionne pas? Elle ne voit jamais motSecret et motDecouvert identique alors qu'en les testant juste avant ils le sont...(j'ai testé dans le main la fonction motDecouvert et ça joue ). Est-ce une mauvaise utilisation de la fonction strcmp??
|
||||||
etrange02
|
# Posté le 20/07/2008 à 02:41:05 | ||||||
Pourquoi, il en faut une?![]() Groupe : Membres |
Je ne pense pas que ta fonction gagnerPerdre() ne fonctionne pas. Je dirai plus que le problème se trouve dans ta fonction main(), le résultat que tu obtiens est mal interprété. Si tu as changer des choses, peux-tu me les remettre, pour savoir où tu en es et évite les balises "secret".
Merci. Je ne sais pas si cela joue mais essaye de ne faire qu'un seul return dans ta fonction gagnerPerdre(). Tu retournerais dans ce cas la valeur d'une variable. En attendant, il ne t'es pas interdit d'afficher en plein milieu de ton programme des chaînes ou des variables pour savoir quoi et comment évolue telle ou telle chose .
Édité
le 20/07/2008 à 02:58:15
par etrange02
Pas de fautes d'orthographe s'il vous plaît et un peu de respect pour la syntaxe |
||||||
bjarni3000
|
# Posté le 21/07/2008 à 23:56:59 | ||||||
|
Groupe : Membres |
Bonsoir!
Vu le temps destiné à répondre, les choses ont avancé et j'ai une bonne et une mauvaise nouvelle J'ai testé avec plein de printf partout pour voir jusqu'où ça fonctionnait et j'ai fini par trouver mes deux solutions: Le premier problème, celui de la double réponse juste à mettre, était dû à mon scanf dans la fonction niveau(). Cette super fonction gardait le "enter" apparemment plus que je ne le pensais. Je me méfierai d'avantage à l'avenir. Le second, celui du jeu qui ne se finissait pas, était dû et bien à une faute d'initialisation si on peut dire. En fait j'ai fait le malloc mais pas spécifié que le dernier caractère serait '\0' donc ça continuait... Bon ça c'est pour les problèmes précédents mais j'en ai rencontré un autre avec la partie dictionnaire et là j'ai eu beau refaire des printf je trouve pas...A voir il y a un problème avec le strlen dans void motpioche(...) mais je comprend pas pourquoi donc si quelqu'un arrive à me trouver une explication ce serait super. Le pire c'est que depuis que j'ai écris cette ligne même si je l'enlève le programme plante...et M@teo21 a fait qqch du même genre d'après le corrigé. Bref un casse-tête je comprend pas...HELP Voilà le code: Le main: Code : C
Les fonctions: Code : C
Et les headers: Code : C
|
||||||
etrange02
|
# Posté le 22/07/2008 à 01:02:37 | ||||||
Pourquoi, il en faut une?![]() Groupe : Membres |
Dans ta fonction main, motSecret doit déjà être une chaîne (enlève aussi l'étoile) et cela ne pose aucun problème (j'ai encore mon code pour te dire) :
Code : C
Ensuite, dans ta fonction motPioche, je te conseil de créer une autre chaîne : Code : C
Grâce à cette chaîne tu peux récupérer un mot du dictionnaire avec fgets comme tu l'as fait (TAILLE_MAX vaut 100) sans oublier la suppression du \n comme tu l'as aussi fait (c'est pas génial ça ?). Ensuite tu copie les caractères présents dans secret dans motSecret et le tour est joué. Mais (il y a toujours un mais), cette fois-ci, il n'y en a pas
Édité
le 22/07/2008 à 01:06:42
par etrange02
Pas de fautes d'orthographe s'il vous plaît et un peu de respect pour la syntaxe |
||||||
bjarni3000
|
# Posté le 22/07/2008 à 01:29:10 | ||||||
|
Groupe : Membres |
YES!!! Bien vu merci énormément!
Faire une autre chaine dans la fonction n'est pas indispensable apparemment mais le tableau à l'initialisation oui. Je pensais faire un malloc plus loin mais vu que ça buggait je l'avais pas fait. Au tout cas merci parce que je cherchais l'erreur ailleurs, vers le strlen plutôt. Ca fonctionne enfin comme j'ai envie,que c'est beau: ni erreur à la compilation ni plantage! Allez maintenant je vais pouvoir l'améliorer un peu ce pendu!!! Merci encore!
|
||||||
etrange02
|
# Posté le 22/07/2008 à 02:20:30 | ||||||
Pourquoi, il en faut une?![]() Groupe : Membres |
N'hésite pas non plus à me faire part des améliorations, ça fait toujours plaisir !
Pas de fautes d'orthographe s'il vous plaît et un peu de respect pour la syntaxe |
||||||
Retour au forum "Langage C" ou à la liste des forums
Vous devez être inscrit pour pouvoir poster des messages
Changer de design |
En savoir plus |
Plan du site |
Politique d'accessibilité |
Règles |
RSS tutoriels |
RSS news
Édité par Simple IT SARL :
Nous contacter
| Notre blog | Revue de presse | Publicité
Y'a plus rien à lire, faut remonter maintenant !
Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.
142 Zéros connectés |
8 requêtes |
0.0237s (0.0076s)
