Probleme en C ( c'est pas dur mais je débute)

lirycs78 Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   -  
lirycs78 Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   514
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Contributeur Dernière intervention   1 846
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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   Statut Membre Dernière intervention   1
 
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   Statut Membre Dernière intervention   1
 
Franchement je vois pas comment faire jai tenter d'ajouter des & mais rien y fait :(
0
lirycs78 Messages postés 103 Date d'inscription   Statut Membre Dernière intervention   1
 
Je te remercie enormément ! Je me débrouillerai pour la suite.
Merci beaucoup
0