IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

transmission de variable via return


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 68
    Points : 44
    Points
    44
    Par défaut transmission de variable via return
    Voici la source de ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int regame()
    {
    int recommencer; // vous voulez rejouer?
    do{
     
        printf("\nVoulez vous recommencer ?\n1\tOUI\n0\tNON\n");
        scanf("%ld",&recommencer);
     
        }while ((recommencer != 1) && (recommencer != 0));
    printf("recommencer = %ld",recommencer);
    return recommencer;
        }
    C'est une fonction que j'utilise dans un mini-jeu pour demander à l'utilisateur si il veut rejouer, tout va bien jusqu'au moment du return. En effet, la valeur de "recommencer" change si je fait un printf dans la fonction, ou après le return dans ma fonction main. Pourquoi donc?

    Serait-ce un problème d'accès à la variable par la fonction main??

  2. #2
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    Tu peux nous donner ton appel à "regame" dans le main.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 68
    Points : 44
    Points
    44
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    main...........
     
     
     
     
    regame();
        printf("\nrecommencer = %ld\n",recommencer);
    /*le printf qui renvoie 
    autre chose que dans la fonction*/
     
     
    .............fin main

  4. #4
    Membre averti
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Décidément, tu es fâché avec les formats de printf() et scanf()
    Un int est un %d et non un %ld

    A part ça, montre aussi ton main()

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 68
    Points : 44
    Points
    44
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    int main ( int argc, char** argv )
    {
        srand(time(NULL));
        int recommencer ;
        do{
            long nombreMystere = 0, nombreEntre = 0;
            const long MAX = 100, MIN = 1;
     
            // Génération du nombre aléatoire
            nombreMystere = genereNombre(MIN, MAX);
     
     
            do
            {
            // On demande le nombre
            printf("Quel est le nombre ? ");
            scanf("%ld", &nombreEntre);
     
            // On compare le nombre entré avec le nombre mystère
            compareNombres(nombreEntre, nombreMystere);
     
            } while (nombreEntre != nombreMystere);
     
        regame();
        printf("\nrecommencer = %d\n",recommencer);
        }while ( recommencer != 0);
     
    }

  6. #6
    Membre averti
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Ta variable recommencer ne sort pas de ta fonction...
    Code plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main(){
    int recommencer;
    ...
    recommencer= regame();
    printf("%d\n", recommencer);
    ...
    }

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 68
    Points : 44
    Points
    44
    Par défaut
    pourtant le return renvoie la valeur du résultat de ma fonction non??? sinon à quoi sert le return ???

    Edit : sa marche c'est magnifique

  8. #8
    Membre averti
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Oui, mais il faut que tu le récupères dans une variable du main(), ce que tu ne fais pas dans ton code.

  9. #9
    Membre averti
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    POur ne pas confondre les variables, voici un nouveau main():
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main(){
    int again;
    ...
    again= regame();
    printf("%d\n", again);
    ...
    }

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 68
    Points : 44
    Points
    44
    Par défaut
    ben merci bcp, grâce a vous je vais m'endormir encore moins con ce soir^^

  11. #11
    Membre éclairé
    Avatar de karami
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Juin 2005
    Messages : 343
    Points : 668
    Points
    668
    Par défaut
    Citation Envoyé par joellel
    Oui, mais il faut que tu le récupères dans une variable du main(), ce que tu ne fais pas dans ton code.
    Tu doit faire un "int a=regame()", ta variable n'est pas globale?

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par K4trix
    Voici la source de ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int regame()
    {
    int recommencer; // vous voulez rejouer?
    do{
     
        printf("\nVoulez vous recommencer ?\n1\tOUI\n0\tNON\n");
        scanf("%ld",&recommencer);
     
        }while ((recommencer != 1) && (recommencer != 0));
    printf("recommencer = %ld",recommencer);
    return recommencer;
        }
    A part que "%ld" attend l'adresse d'un long (scanf()) ou un long (printf()) et non l'adresse d'un int, ni un int, ce code parrait correct.

    Le printf() fonctionnerait mieux avec un '\n' à la fin (et je suppose que la présentation s'en trouverait améliorée...)
    C'est une fonction que j'utilise dans un mini-jeu pour demander à l'utilisateur si il veut rejouer, tout va bien jusqu'au moment du return. En effet, la valeur de "recommencer" change si je fait un printf dans la fonction, ou après le return dans ma fonction main. Pourquoi donc?

    Serait-ce un problème d'accès à la variable par la fonction main??
    Non. Je soupçonne autre chose ailleurs...

  13. #13
    Membre averti
    Avatar de joellel
    Profil pro
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Points : 338
    Points
    338
    Par défaut
    Son problème se situait lors de l'appel à la fonction regame(). Il ne récupérait pas la valeur retournée mais affichait le contenu d'une variable non initialisée du main()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. transmission de $variable via un formulaire
    Par kraken972 dans le forum Langage
    Réponses: 4
    Dernier message: 29/05/2008, 15h52
  2. Transmission de variables submit via un menu dynamique
    Par gilardino dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/08/2007, 00h13
  3. variable via return +dur
    Par K4trix dans le forum C
    Réponses: 5
    Dernier message: 07/07/2006, 07h31
  4. Transmettre une variable via un lien href
    Par developpeur_mehdi dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 08/01/2005, 14h49
  5. transmission de variables
    Par nicerico dans le forum ASP
    Réponses: 14
    Dernier message: 16/08/2004, 16h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo