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
Bonjour,
Je débute est jai coder le mini jeu qu'il propose sur le site du zero.
Tout fonctionne le compteur qui pourtant est incrémenter dans la function. Mais celui ci reste a un.
Je cherche mais je trouve pas,si une personne pouvait maider :'(

Pour plus de clarter et pour la colorisation synthaxique je vous les copier sur rafb.
http://rafb.net/p/QH4kR374.html

Merci
A voir également:

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
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.
1
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
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 *)
1
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
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 :
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
1
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
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
1

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
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
0
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
Franchement je vois pas comment faire jai tenter d'ajouter des & mais rien y fait :(
0
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
Je te remercie enormément ! Je me débrouillerai pour la suite.
Merci beaucoup
0