[C++] Besoin d'aide sur un return ... niveau debutant :)

Besoin d'aide sur un return ... niveau debutant :) [C++] - Programmation

Marsh Posté le 01-04-2002 à 00:03:14    

Salut, j'ai un problème tout bête sur C++ ...
 
simplement, en utilisant une fonction "charger", elle retourne 3 valeurs
 
ex :  
int charger()
{
...
return a,b,c ;
}
 
avec a,b et c 3 int evidement
 
comment puis-je faire pour les recupérer individuellement par la suite?
 
c a d : j'appelle dans mon main :
charger();
et pour recup? :)
si je fais int x = charger(); , x prends uniquement la valeur du dernier int retourné, c'est à dire "c"
 
 
merci d'avance
 
@+


---------------
...You'll be perfect just like me...
Reply

Marsh Posté le 01-04-2002 à 00:03:14   

Reply

Marsh Posté le 01-04-2002 à 00:21:55    

oola !

Reply

Marsh Posté le 01-04-2002 à 00:27:39    

tu ne peux retourner qu'un entier ou un pointeur.
 
dans ta fonction, tu peux utiliser le passage par référence pour 'renvoyer' tes variables, puis renvoyer un bool pour savoir si le chargement s'est bien passé.
 
bool charger(int& a, int& b, int& c)
{
  if (erreurquelconque ...) return false;
  a = 1; b = 2; c = 3;
  return true;
}
 
...
 
int a, b, c;
bool b = charger();

Reply

Marsh Posté le 01-04-2002 à 00:44:32    

g juste une ptite question toute bete ... t'as lu la doc avant de commencer ???

Reply

Marsh Posté le 01-04-2002 à 11:42:59    

merci pour ton aide youdontcare...  :jap:  
 
oui, Harry, j'avais lu la doc, ca fait un petit moment que je fais du c++, c juste que j'avais jamais pensé a cette possibilité de retourner plusieurs données par return ...
cette idée lumineuse m'a frappé hier a minuit, et vu que ca compilait, j'ai eu un instant l'espoir que ca fonctionnerait  :pt1cable:  
 
sinon, j'avais pensé à retourner une map (ou vector) contenant mes données pour les recupérer, mais c moins pratique...

 

[jfdsdjhfuetppo]--Message édité par BFRRedox--[/jfdsdjhfuetppo]


---------------
...You'll be perfect just like me...
Reply

Marsh Posté le 01-04-2002 à 12:17:47    

>> vu que ca compilait
 
c'est du C standard, le compilo évalue les expressions les unes après les autres.
 
l'intérêt de la virgule dans un return est de compacter le code (après on aime ou on n'aime pas).
 
// version 'standard'
 
bool myFunc(int param)
{
  if (param)
  {
    doThis();
    return true;
  }
  else
  {
    doThat(param);
    return false;
  }
}
 
// version virgule
 
bool myFunc(int param)
{
  if (param)  return doThis(), true;
  else        return doThat(param), false;
}

Reply

Marsh Posté le 01-04-2002 à 12:34:10    

Et en plus compact :
return param?(doThis(),true):(doThat,false);
 
(bordel de smilies de merde)


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
Reply

Marsh Posté le 01-04-2002 à 13:54:44    

effectivement :D

Reply

Marsh Posté le 01-04-2002 à 14:24:34    

BFRRedox a écrit a écrit :

Salut, j'ai un problème tout bête sur C++ ...
 
simplement, en utilisant une fonction "charger", elle retourne 3 valeurs
 
ex :  
int charger()
{
...
return a,b,c ;
}
 
avec a,b et c 3 int evidement
 
comment puis-je faire pour les recupérer individuellement par la suite?
 
c a d : j'appelle dans mon main :
charger();
et pour recup? :)
si je fais int x = charger(); , x prends uniquement la valeur du dernier int retourné, c'est à dire "c"




 
C'est pas logique ce que tu veux faire : comment veux tu faire "tenir" 3 entiers dans un seul ?  
Pour ton problème, je te conseille de lire un bon bouquin de C++, particulièrement le chapitre sur les tableaux.


---------------
"Dieu a exploité tous nos complexes d'infériorité, en commençant par notre incapacité de croire à notre propre divinité." - Emil Michel Cioran
Reply

Marsh Posté le 01-04-2002 à 17:42:03    

BFRRedox a écrit a écrit :

Salut, j'ai un problème tout bête sur C++ ...
 
simplement, en utilisant une fonction "charger", elle retourne 3 valeurs




 
je suis juste un chouilla moins débutant que toi, mais ce que je sais, c'est que si tu utilises "return", ça ne marche qu'avec une seule valeur (int, float,double...)
tu as deux solutions :
- ou bien tu crées un tableau de 3 cases dans lequel tu fourres tes trois entiers, et tu dis à ta fonction de retourner le tableau (et non pas les trois valeurs).
- ou bien tu utilises les pointeurs ; il n'y aura plus de commande "return" proprement dite dans ta fonction.  Les pointeurs c'est un peu hard à capter au départ mais une fois que tu as compris, tu pourras plus t'en passer :)  Ainsi,
 
 
main()
{     int a,b,c ;  
      void charger(int x, int y, int z) ;
      charger(&a,&b,&c) ;
      ...=a ;
      ...=b ;
      ...=c ;
}
 
 
void charger(int *x, int *y, int *z)  
{     *x=... ;
      *y=... ;
      *z=... ;
}      
 
 
Bye

 

[jfdsdjhfuetppo]--Message édité par eniac--[/jfdsdjhfuetppo]


---------------
If you really want something, all the Universe conspires in helping you to achieve it.
Reply

Marsh Posté le 01-04-2002 à 17:42:03   

Reply

Marsh Posté le 01-04-2002 à 21:25:16    

eniac a écrit a écrit :

 
void charger(int *x, int *y, int *z)  
{     *x=... ;
      *y=... ;
      *z=... ;
}      
 
 
Bye  




 
now that's better ;)

Reply

Marsh Posté le 02-04-2002 à 01:03:46    

Je voudrais juste te conseiller BFRRedox de lire un bouquin de C aux chapitres suivants:
- pointeur
 
- passage par paramètre
 
Apres tout deviendra clair...
 :)  
 
P.S.: oublie ta solution de passer par un tableau car c bidon c pas du C c du bricolage... les pointeurs c fait justement pour modifer une variable a l'interieur d'une fonction...


---------------
"The oldest and strongest emotion of Mankind is Fear and the oldest and strongest Fear is the Fear of the Unknown"
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed