
| Page 1 | |||||||
| Auteur | Message | ||||||
|---|---|---|---|---|---|---|---|
| 1 visiteur sur ce sujet (1 Anonyme) | |||||||
| Page 1 | |||||||
yagami
|
# Posté le 05/07/2009 à 18:11:56 | ||||||
Viser la lune![]()
|
Re-Bonjour;
voila je viens de finir de coder la fonction qui se charge de transformer ****** en M*RR** (pour MARRON) si on lui fourni une chaine qui contient M et R. Quand je test cette fonction de cette manière: Code : C
Ca me donne : MARR** Mais quand je fait ça Code : C
Le programme plante juste après le printf. Est ce encore un problème de types ? La variable "caractersEntrees" a une valeur, puisqu'elle fonctionne bien dans le printf, alors pourquoi pas dans ma fonction ? Code : C
Merci. C'est en forgeant qu'on devient forgeron On progresse en corrigeant ses erreurs, en profitant de l’expérience de tous et en innovant. Les bons artistes copient, les grands artistes pillent. Steven Paul Jobs |
||||||
Al3xx
|
# Posté le 05/07/2009 à 18:13:49 | ||||||
|
études : IPSA |
caractersEntrees est un pointeur sur char, si tu veux avoir accès au caractère sur lequel il pointe, il faut écrire *caractersEntrees.
|
||||||
yagami
|
# Posté le 05/07/2009 à 18:25:58 | ||||||
Viser la lune![]()
|
caractersEntrees est un tableau et si je fait *caractersEntrees ça revient à faire caractersEntrees[0] or moi c'est bien l'adresse du tableau que je veux envoyer pour que les valeurs qu'il contient soient traitées par afficherMasque().
D'ailleurs même si je fais *caractersEntrees ça ne change rien le programme plante toujours après le printf. EDIT: J'ai reglé le problème en faisant un truc du genre: Code : C
Quelqu'un peut me dire pourquoi ça ne fonctionnait pas avant ? Merci
Édité
le 05/07/2009 à 19:01:47
par yagami
C'est en forgeant qu'on devient forgeron On progresse en corrigeant ses erreurs, en profitant de l’expérience de tous et en innovant. Les bons artistes copient, les grands artistes pillent. Steven Paul Jobs |
||||||
quentin01
|
# Posté le 05/07/2009 à 19:01:04 | ||||||
Imaginez - Creer - Innover![]()
Ville : Cormoranche sur saone |
La tu donne une adresse a printf a la place d'une valeur met une * devant caractersEntrees de la fonction printf. Et pis mais y aussi devant celui de ta fonction afficherMasque parceque tu leur envoie des adresses alors qu'ils veulent des valeurs.
Édité
le 05/07/2009 à 19:02:17
par quentin01
![]() Site encore un peu vide, on recrute ici | Mon portfolio ici design pas très beau ![]() Equipe WingTeam, l'équipe aussi rapide que le vent en formation. Langage que je connais : XHTML | CSS | PHP | SQL | Javascript | C | C++ | Batch Langage dont je connais les bases : Java | Assembleur et encore d'autre que je ne citerais pas. |
||||||
yagami
|
# Posté le 05/07/2009 à 19:03:53 | ||||||
Viser la lune![]()
|
J'ai réglé le problème voir mon edit plus haut.
Sinon j'aimerai bien une explication si c'est possible. C'est en forgeant qu'on devient forgeron On progresse en corrigeant ses erreurs, en profitant de l’expérience de tous et en innovant. Les bons artistes copient, les grands artistes pillent. Steven Paul Jobs |
||||||
quentin01
|
# Posté le 05/07/2009 à 19:06:58 | ||||||
Imaginez - Creer - Innover![]()
Ville : Cormoranche sur saone |
Ca ne fonctionnait pas car avant tu lui envoyait un char alors que ta fonction voulais avoir un tableau de char ( enfin je crois ) ^^.
![]() Site encore un peu vide, on recrute ici | Mon portfolio ici design pas très beau ![]() Equipe WingTeam, l'équipe aussi rapide que le vent en formation. Langage que je connais : XHTML | CSS | PHP | SQL | Javascript | C | C++ | Batch Langage dont je connais les bases : Java | Assembleur et encore d'autre que je ne citerais pas. |
||||||
Al3xx
|
# Posté le 05/07/2009 à 19:37:27 | ||||||
|
études : IPSA |
Code : C
Je ne vois pas la déclaration d'un tableau ici, mais sache que si tu as un tableau de char, tu as une chaîne de caractères et non pas un caractère seul. Code : C
Le 2nd paramètre du printf indique que temp[coups] est de type char, donc caractersEntrees est bien de type char puisque tu affectes cette variable à une case de ton tableau. Ou alors tu utilises des types non compatibles, auquel cas ton compilateur te le ferait remarquer. PS: je parlais du printf dans mon premier post, pas de l'appel de la fonction
|
||||||
yagami
|
# Posté le 05/07/2009 à 19:57:23 | ||||||
Viser la lune![]()
|
Merci Al3xx pour ces explications.
A force de faire des erreurs et de les corriger on fini par apprendre, comme disent les ricains (trial and error) ![]() Maintenant j'ai un autre problème. D'abords le code: Code : C
Le problème est que mon programme ne fonctionne que pour la première tenatative. Si par exemple j'entre 'M' je reçois M***** mais à la prochaine tenative, quoique je fasse je reçois toujours M*****. Le tableau temp contient bien les caractères qu'entre l'utilisateur au fur et à mesure qu'il joue. Par contre si je fait ça (pour tester): Code : C
Et bien ça fonctionne, et ça me renvois M*RR**. tableau[4] peut contenir ce que temp contiendra après la quatrième tentative du joueur. Où est l'erreur ? C'est en forgeant qu'on devient forgeron On progresse en corrigeant ses erreurs, en profitant de l’expérience de tous et en innovant. Les bons artistes copient, les grands artistes pillent. Steven Paul Jobs |
||||||
Kennylou
|
# Posté le 05/07/2009 à 20:05:28 | ||||||
![]()
|
Déjà, pourquoi utiliser un char* pour stocker seulement le caractère retourné par ta fonction lireCaractere() ?
Ensuite, si tu tiens à garder en mémoire tous les caractères entrés par l'utilisateur, autant faire directement temp[coups] = lireCaractere(); |
||||||
yagami
|
# Posté le 05/07/2009 à 20:11:49 | ||||||
Viser la lune![]()
|
En fait mon problème, c'est que je n'ai pas encore pris l'habitude des types.
Au début j'avais besoin d'un char*, car je croyais que j'allais utiliser ce pointeur pour stocker les valeurs entrées par les utilisateurs, mais au fur et à mesure que le code s'élargir, les besoins changes, et j'ai encore du mal à me dire qu'il faut aussi changer le type de la variable quand sa fonction n'est plus la même .Maintenant j'ai changé caractersEntrees en int. Merci encore une fois pour ton aide. Sinon, as tu une idée pour mon nouveau problème, plus haut ? C'est en forgeant qu'on devient forgeron On progresse en corrigeant ses erreurs, en profitant de l’expérience de tous et en innovant. Les bons artistes copient, les grands artistes pillent. Steven Paul Jobs |
||||||
Kennylou
|
# Posté le 05/07/2009 à 20:12:32 | ||||||
![]()
|
Tu peux montrer tout ton code stp ?
|
||||||
yagami
|
# Posté le 05/07/2009 à 20:16:23 | ||||||
Viser la lune![]()
|
Voici mon main.c :
Secret (cliquez pour afficher) Code : C
Et ma fonction "afficherMasque": Secret (cliquez pour afficher) Code : C
Édité
le 05/07/2009 à 20:18:09
par yagami
C'est en forgeant qu'on devient forgeron On progresse en corrigeant ses erreurs, en profitant de l’expérience de tous et en innovant. Les bons artistes copient, les grands artistes pillent. Steven Paul Jobs |
||||||
Kennylou
|
# Posté le 05/07/2009 à 20:22:46 | ||||||
![]()
|
Alors déjà, pourquoi un tableau de char* ?
Ensuite, fais comme je t'ai dit, fais directement temp[coups] = lireCaractere(); au lieu de passer par une variable intermédiaire. edit : ouais en fait ton problème était la déclaration de ton tableau de char*. Tu aurais du déclarer simplement un tableau normal. Normalement, ça devrait marcher même s'il y a à redire sur l'algorithme
Édité
le 05/07/2009 à 20:28:27
par Kennylou
|
||||||
yagami
|
# Posté le 05/07/2009 à 20:29:58 | ||||||
Viser la lune![]()
|
Citation : Kennylou
Alors déjà, pourquoi un tableau de char* ? Ensuite, fais comme je t'ai dit, fais directement temp[coups] = lireCaractere(); au lieu de passer par une variable intermédiaire. edit : ouais en fait ton problème était la déclaration de ton tableau de char*. Tu aurais du déclarer simplement un tableau normal. Où est ce que je dois déclarer un tableau normal ? Et puis, faire ceci temp[coups] = lireCaractere(); ne régle rien puisque c'est juste une forme simplifiée de ce que je fais.
Édité
le 05/07/2009 à 20:31:31
par yagami
C'est en forgeant qu'on devient forgeron On progresse en corrigeant ses erreurs, en profitant de l’expérience de tous et en innovant. Les bons artistes copient, les grands artistes pillent. Steven Paul Jobs |
||||||
Kennylou
|
# Posté le 05/07/2009 à 20:32:04 | ||||||
![]()
|
char temp[10]; au lieu de char* temp[10];
Citation : yagami Et puis, faire ceci temp[coups] = lireCaractere(); ne régle rien puisque c'est juste une forme simplifiée de ce que je fais. Bien sûr, mais pourquoi faire compliqué quand on peut faire simple ?
Édité
le 05/07/2009 à 20:33:02
par Kennylou
|
||||||
yagami
|
# Posté le 05/07/2009 à 20:43:21 | ||||||
Viser la lune![]()
|
Merci beaucoup. C'était bien ça.
Maintenant ça fonctionne. Je me rends compte que je confond entre déclarer un tableau et déclarer un pointeur. Dans ma tête ça revient au même puisque les tableaux sont des pointeurs. Mais je comprends mieux maintenant. Merci encore une fois à tous ceux qui m'ont aidé
C'est en forgeant qu'on devient forgeron On progresse en corrigeant ses erreurs, en profitant de l’expérience de tous et en innovant. Les bons artistes copient, les grands artistes pillent. Steven Paul Jobs |
||||||
Retour au forum "Langage C" ou à la liste des forums
Le Site du Zéro vous proposera bientôt de nouveaux cours partant de Zéro dans d'autres domaines que l'informatique !

