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 :

Valeur de retour pour fonction


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 49
    Points : 37
    Points
    37
    Par défaut Valeur de retour pour fonction
    Bonjour;
    J'ai une fonction en c, et je veux retourner plus qu'une valeur(qui n'est permis avec c), alors j'ai affiché uniquement ces 3 valeurs;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void intermediatesymbols(int k){
        // codes
     
        printf("g = %d\n", g);
        printf("s = %d\n", s);
        printf("h = %d\n", h);
    }
    Mon probleme c'est que dans une autre fonction, je veux utiliser les 3 valeurs(qui sont affichées par la fonction "intermediatesymbols" et pas retournées). Alors comment faire?
    Merci d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Utilise la balise code signalée par un croisillon pour poster du code

    Les solutions que je vois:
    • Passer ces 3 variables en paramètres in/ out <- Des pointeurs
    • Les encapsuler dans une structure
    • Faire 3 variables globales
    • Faire un tableau si ces 3 variable ont le même type

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    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 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu peux retourner une structure, ou prendre des pointeurs en paramètres:
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void intermediatesymbols(int k, int *pg, int *ps, int *ph){
     
    	/* codes */
     
    	printf("g = %d\n", g);
    	printf("s = %d\n", s);
    	printf("h = %d\n", h);
    	*pg = g;
    	*ps = s;
    	*ph = h;
    }
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    Ah oui ils sont de meme type,Merciiiiiii pour votre reponse.


  5. #5
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Pour l'illustration, pour la structure, ca donne ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    typedef struct s_Point3D {int g,h,s;} Point3D;
     
    Point3D genererPoint() {
        Point3D p = {1, 2, 3};
        return p;
    }
     
    int main () {
        Point3D point = genererPoint();
        printf("g = %d\ns = %d\nh = %d\n", point.g, point.h, point.s);
        return 0;
    }
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  6. #6
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Sinon, pour avoir une variante qui a une chance de fonctionner de passer par l'affichage, il n'y a qu'à utiliser snprintf pour afficher dans une chaine, snscanf pour en lire une, et faire retourner simplement cette chaine.

    Par contre, cette solution a plein de défaut:
    • c'est moche
    • c'est vraiment, vraiment très moche
    • il y aura des fuites mémoires
    • s'il n'y en a pas, c'est parce que tu auras des tas d'arguments supplémentaires
    • sinon, c'est parce qu'il y aura des variables globales
    • si tu t'en sors, le code sera quand même tordu, lent, et toujours aussi moche


    Mais c'est faisable.

    L'affichage lui est un faisable, parce que la mémoire d'affichage n'est pas lisible, sans passer par des trucs ultra-crades relevant plus du viol de processeur que du développement.

    Bref, utilise au choix les pointeurs ou la structure.
    Tu peux même combiner les deux avec une structure en pointeur.

    La structure elle-même sera une bonne idée.
    En effet, si la même fonction génère les trois valeurs en même temps, c'est qu'elles vont ensemble, et qu'il vaut mieux les manipuler comme un tout.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Janvier 2012
    Messages : 49
    Points : 37
    Points
    37
    Par défaut
    Merci pour votre reponse.Mon probleme n'est pas l'affichage, mais plutot le retour des valeurs pour pouvoir les utiliser dans des autres fonctions.Je pense que la meilleure façon est d'utiliser ou bien un pointeur ou bien une structure.
    Encore une fois merci pour votre aide.

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 189
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 189
    Points : 17 141
    Points
    17 141
    Par défaut
    Mon premier message t'indique comment passer par une structure.
    Je te recommande chaudement la structure, qui explicite une unité sémantique.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

Discussions similaires

  1. DEBUGGING et valeur de retour de fonction - Comment faites-vous ?
    Par arketip dans le forum Général Python
    Réponses: 13
    Dernier message: 08/11/2009, 13h23
  2. Réponses: 8
    Dernier message: 14/12/2007, 17h12
  3. Réponses: 9
    Dernier message: 11/11/2007, 11h40
  4. [VB6] Valeur de retour pour une Form
    Par preverse dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/08/2004, 17h16
  5. Pourquoi une seule valeur de retour pour les fonctions ?
    Par Bruno75 dans le forum Langages de programmation
    Réponses: 33
    Dernier message: 18/01/2004, 13h58

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