Probleme en C ( c'est pas dur mais je débute)
Fermé
lirycs78
Messages postés
103
Date d'inscription
vendredi 7 juillet 2006
Statut
Membre
Dernière intervention
7 janvier 2010
-
26 févr. 2009 à 13:54
lirycs78 Messages postés 103 Date d'inscription vendredi 7 juillet 2006 Statut Membre Dernière intervention 7 janvier 2010 - 26 févr. 2009 à 15:06
lirycs78 Messages postés 103 Date d'inscription vendredi 7 juillet 2006 Statut Membre Dernière intervention 7 janvier 2010 - 26 févr. 2009 à 15:06
A voir également:
- Probleme en C ( c'est pas dur mais je débute)
- Cloner disque dur - Guide
- Defragmenter disque dur - Guide
- Remplacer disque dur par ssd - Guide
- Chkdsk disque dur externe - Guide
- Nettoyage disque dur - Guide
7 réponses
NookZ
Messages postés
2138
Date d'inscription
jeudi 29 janvier 2009
Statut
Membre
Dernière intervention
7 mars 2013
514
26 févr. 2009 à 13:58
26 févr. 2009 à 13:58
C'est normal car ton compteur est initialisé à 0 dans ton main puis tu envoies SA VALEUR à la fonction donc 0 et non pas la référence de ton compteur.
Donc quand il arrive dans la fonction il n'y a plus aucun lien entre ton compteur du main et le compteur que tu utilises dans ta fonction.
Donc quand il arrive dans la fonction il n'y a plus aucun lien entre ton compteur du main et le compteur que tu utilises dans ta fonction.
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 018
26 févr. 2009 à 14:02
26 févr. 2009 à 14:02
Voilà le problème, quand le compteur est envoyé dans compare_nombre, en fait c'est sa valeur qui est copié, donc quand tu incrémentes avec compteur++ c'est en fait la copie que tu incrémentes, donc quand tu sors ta copie est bien incrémenté mais le compteur original est toujours à 0, c'est pour ça que ça affiche toujours 1 !
Pour résoudre ce problème il faut passer ton compteur par référence (avec des & et des *)
Pour résoudre ce problème il faut passer ton compteur par référence (avec des & et des *)
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 840
26 févr. 2009 à 14:13
26 févr. 2009 à 14:13
Salut,
Dans ton code, il y a plusieurs problème.
Déjà, dans ta première fonction, tu renvoies la valeur de printf, alors que ce n'est pas ça qu'il faut renvoyer au vu de ton programme. Lorsque tu souhaites changer une valeur en C par fonction, tu as deux façons. Soit la fonction renvoie une valeur et donc tu la récupères. Par exemple :
Soit, tu donnes l'adresse de la valeur (notion de pointeur, et non de référence qui n'existe pas en C) à l'instar du scanf. Par exemple :
Dans ta fonction genere_nombre_mystere, tu as mis srand, ce qui n'est pas bon. Tu dois utiliser srand() une seule fois dans ton programme. Donc, tu le mets dans le main(void) par exemple ;)
Je n'ai pas regardé le reste. Corrige déjà ça, et reposte ton code si ça ne marche toujours pas ;).
Cdlt
Dans ton code, il y a plusieurs problème.
Déjà, dans ta première fonction, tu renvoies la valeur de printf, alors que ce n'est pas ça qu'il faut renvoyer au vu de ton programme. Lorsque tu souhaites changer une valeur en C par fonction, tu as deux façons. Soit la fonction renvoie une valeur et donc tu la récupères. Par exemple :
int toto=fonction();.
Soit, tu donnes l'adresse de la valeur (notion de pointeur, et non de référence qui n'existe pas en C) à l'instar du scanf. Par exemple :
int toto; fonction(&toto); //utilisera la fonction : void fonction(int *p);
Dans ta fonction genere_nombre_mystere, tu as mis srand, ce qui n'est pas bon. Tu dois utiliser srand() une seule fois dans ton programme. Donc, tu le mets dans le main(void) par exemple ;)
Je n'ai pas regardé le reste. Corrige déjà ça, et reposte ton code si ça ne marche toujours pas ;).
Cdlt
KX
Messages postés
16752
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
31 août 2024
3 018
26 févr. 2009 à 14:50
26 févr. 2009 à 14:50
D'une part :
long compare_nombre(long nb, long nm, unsigned char * compteur,long nombreMystere){ if(nb > nm){ (*compteur)++; return printf("C'est moin !\ncompteur : %ld\n",*compteur); }else if(nb < nm){ (*compteur)++; return printf("C'est plus !\ncompteur : %ld\n",*compteur); }else{ return printf("Bien jouer ! Le nombre est : %ld\n Vous avez trouver en %ld coups\n", nm, *compteur); //printf("Rejouer ? (1 = oui | 0 = non) "); //scanf("%ld", &rejouer); //*compteur = 0; } }Et d'autre part dans ton code principal
compare_nombre(nombre, nombreMystere, &compteur, nombreMystere);Ici je n'ai pas corrigé tous les problèmes relevés par fiddy, juste celui de ton compteur
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lirycs78
Messages postés
103
Date d'inscription
vendredi 7 juillet 2006
Statut
Membre
Dernière intervention
7 janvier 2010
1
26 févr. 2009 à 14:23
26 févr. 2009 à 14:23
Merci pour vos reponse je vais corriger sa, j'ai refait le code en php car je le maitrise beaucoup plus, et j'ai resolut le probléme en mettant un global $compteur dans ma function. Mais manifestement en C c plus compliquer que sa :/
Merci encore
Merci encore
lirycs78
Messages postés
103
Date d'inscription
vendredi 7 juillet 2006
Statut
Membre
Dernière intervention
7 janvier 2010
1
26 févr. 2009 à 14:47
26 févr. 2009 à 14:47
Franchement je vois pas comment faire jai tenter d'ajouter des & mais rien y fait :(
lirycs78
Messages postés
103
Date d'inscription
vendredi 7 juillet 2006
Statut
Membre
Dernière intervention
7 janvier 2010
1
26 févr. 2009 à 15:06
26 févr. 2009 à 15:06
Je te remercie enormément ! Je me débrouillerai pour la suite.
Merci beaucoup
Merci beaucoup