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 :

Fonctionnant retournant plusieurs variables


Sujet :

C

  1. #1
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut Fonctionnant retournant plusieurs variables
    Bonjour, je voulais savoir comment à partir d'une fonction, retourner plusieurs variables, serait-ce comme cela ? :

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    double mafonction(double a, double b)
    {
    	double r1, r2;
    	r1 = a+b;
    	r2 = a-b;
    	return r1;
    	return r2;
    }
    Comment prendre "à la sortie" de la fonction les deux variables ?

    Comme cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main()
    {
    	double r;
    	doubler1;
    	double b = 1, a = 2;
     
    	r = mafonction(a, b) = r2 
    }

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par _SamSoft_
    Bonjour, je voulais savoir comment à partir d'une fonction, retourner plusieurs variables, serait-ce comme cela ? :
    Non pas du tout...

    Il faut retourner une structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    typedef struct sbla
    {
      double r1,r2;
    }SBla;
     
    SBla mafonction(double a, double b)
    {
    	SBla res;
    	res.r1 = a+b;
    	res.r2 = a-b;
    	return res;
    }
    Mais cela n'est pas génial car il faudra recopier les valeurs à chaque fois. Du
    coup, on préfére passer la structure en paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void mafonction(double a, double b, SBla *bla)
    {
    	bla->r1 = a+b;
    	bla->r2 = a-b;
    }
    Mais il faut savoir se débrouiller avec les pointeurs...

    ou alors passer directement par les pointeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void mafonction(double a, double b, SBla *bla, double *r1, double *r2)
    {
    	*r1 = a+b;
    	*r2 = a-b;
    }
    Le plus simple reste tout de même de faire deux fonctions distinctes
    Jc

  3. #3
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par _SamSoft_
    Bonjour, je voulais savoir comment à partir d'une fonction, retourner plusieurs variables, serait-ce comme cela ?
    Non, c'est incorrect. Vous avez plusieurs choix:
    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
    typedef struct
     {
     double r1,r2;
     }
     RETURNVAL;
     
     
    RETURNVAL mafonction(double a, double b)
     {
     RETURNVAL result;
     
     result.r1 = a+b;
     result.r2 = a-b;
     return result;
     }
     
     
    int main(void)
     {
     RETURNVAL result;
     double b = 1, a = 2;
     
     result=mafonction(a,b);
     return 0;
     }
    ou bien encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void mafonction(double a,double b,double *r1,double *r2)
     {
     *r1=a+b;
     *r2=a-b;
     }
     
     
    int main(void)
     {
     double b = 1, a = 2,r1,r2;
     
     mafonction(a,b,&r1,&r2);
     return 0;
     }

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Sachant que retourner une structure est déconseillé car compliqué (la structure ne tient pas forcément dans un/deux registres). Il est souvent préférable de passer son adresse, comme dans l'exemple de fearyourself:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void mafonction(double a, double b, SBla *bla)
    {
    	bla->r1 = a+b;
    	bla->r2 = a-b;
    }

  5. #5
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    Ma fonctio est séparé de mon prog car elle est dans une dll, donc coment faire de cette facon ?

    Merci

  6. #6
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par _SamSoft_
    Ma fonctio est séparé de mon prog car elle est dans une dll, donc coment faire de cette facon ?

    Merci
    Je ne vois pas ce que ça change.

  7. #7
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    void mafonction(double a, double b, SBla *bla)
    {
    bla->r1 = a+b;
    bla->r2 = a-b;
    }

    A quoi sert ce ; SBla *bla ?

  8. #8
    Membre éclairé Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Points : 771
    Points
    771
    Par défaut
    Citation Envoyé par _SamSoft_
    void mafonction(double a, double b, SBla *bla)
    {
    bla->r1 = a+b;
    bla->r2 = a-b;
    }

    A quoi sert ce ; SBla *bla ?
    A faire ce que vous avez demandé, ie retourner 2 valeurs à la fonction appelante, car ce n'est pas en mettant 2 return que vous réussirez.

  9. #9
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    ok merci !

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

Discussions similaires

  1. Fonction qui retourne plusieurs valeurs !
    Par casafa dans le forum C++
    Réponses: 20
    Dernier message: 23/04/2014, 16h56
  2. fonction qui retourne plusieurs variables
    Par laurentSc dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 11/04/2011, 11h06
  3. [RegEx] Mon regex ne fonctionne pas..la variable retourne Array
    Par joboy84 dans le forum Langage
    Réponses: 1
    Dernier message: 09/06/2008, 18h11
  4. Sous requetes retourne plusieurs variables
    Par poosh dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 25/08/2006, 09h51
  5. Réponses: 14
    Dernier message: 09/04/2004, 13h44

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