Partage

return avec plusieurs valeurs

Sujet résolu
Le 25 septembre 2010 à 1:41:03

Bonjour à tous,

Encore une fois je sollicite vos multiples talents. J'utilise une fonction qui retourne plusieurs valeurs un exemple sera des plus claire.

string Get_C()
{
string str = "ABCDEF";
string p1, p2, p3, p4;

int i = rand() %str.size() + 1;

p1 = str.substr(i - 1, 1);
    i = 0;
    i = rand() %str.size() + 1;
p2 = str.substr(i - 1, 1);
    i = 0;
    i = rand() %str.size() + 1;
p3 = str.substr(i - 1, 1);
    i = 0;
    i = rand() %str.size() + 1;
p4 = str.substr(i - 1, 1);
    i = 0;
    i = rand() %str.size() + 1;   

return p1, p2, p3, p4;    
}


Voilà normalement j'appellerais la valeur de retour de Get_C comme ceci dans le main: string GetStr = Get_C();!
Mais comment faire avec mes 4 valeurs de retour?

Merci d'avance:)
Publicité
Le 25 septembre 2010 à 1:41:03
Le 25 septembre 2010 à 1:53:18

Ta fonction ne retourne que p4. En effet, la virgule est un opérateur un peu particulier.

Si tu veux renvoyer plusieurs valeurs d'un coup, met les dans un objet et retourne l'objet.
Le 25 septembre 2010 à 2:00:23

Je comprends ton concept de mettre dans un objet seul petit problème je vois pas comment faire à tu un début de piste pour moi?
Le 25 septembre 2010 à 4:20:21

struct Points // Structure qui contiendras les points (tu peux aussi utiliser un class et ne pas oublier de mettre p1, p2, p3 et p4 public)
{
	string p1;
	string p2;
	string p3;
	string p4;
};

Points Get_C() // La fonction retourne la structure créée plus haut
{
	string str = "ABCDEF";
	Points pointsStruct;
	
	srand(time(NULL)); // Initializer le temps
	int i = rand() %str.size() + 1;
	
	pointsStruct.p1 = str.substr(i - 1, 1);
    i = 0;
    i = rand() %str.size() + 1;
	pointsStruct.p2 = str.substr(i - 1, 1);
    i = 0;
    i = rand() %str.size() + 1;
	pointsStruct.p3 = str.substr(i - 1, 1);
    i = 0;
    i = rand() %str.size() + 1;
	pointsStruct.p4 = str.substr(i - 1, 1);
    i = 0;
    i = rand() %str.size() + 1;   
	
	return pointsStruct;    
}

int main (int argc, char * const argv[]) { // Un code de test
	
	Points pointsFunc = Get_C();
	cout << "p1: " << pointsFunc.p1 << endl;
	cout << "p2: " << pointsFunc.p2 << endl;
	cout << "p3: " << pointsFunc.p3 << endl;
	cout << "p4: " << pointsFunc.p4 << endl;
        return 0;
}


J'ai pas testé mais ça devrait fonctionner ;)
Le 25 septembre 2010 à 5:00:32

Une autre idée est de passer une référence sur un std::vector à la fonction, cette dernière se chargera de remplir le std::vector.
Le 25 septembre 2010 à 6:11:25

Je vais tester le secret et je t'en redonne des nouvelles j'étais justement en train de fouiller dans les structs mais tu as éclaircis tous ça merci beaucoup.
Le 25 septembre 2010 à 8:34:56

ou alors des pointeurs, tout simplement ...
Le 26 septembre 2010 à 4:49:52

Merci encore pour vos réponse j'ai finalement opté pour les pointeurs qui m'effrayait je dois l'avoué mais avec un peu d'étude j'ai constaté qu'ils ne sont pas si sorciers que ça. ;)
J'ai abandonné l'idée de structure simplement parce que le procédé était trop complexe dans le contexte selon moi! (L'idée étais par contre excellente)

Voici finalement le résultat.

#include <iostream>
#include <string>

using namespace std;

void Get(string &, string &, string &, string &);

int main()
{
string a,b,c,d;
Get(a,b,c,d);

cout <<a<<b<<c<<d;


return 0;
}

void Get(string &p1, string &p2, string &p3, string &p4)
{

srand(time(NULL));
string str = "ABCDEF";

int i = rand() %str.size() + 1;

bool Looping_ = false;

while(Looping_ == false)
{

    p1 = str.substr(i - 1, 1);

    i = 0;
    i = rand() %str.size() + 1;
    p2 = str.substr(i - 1, 1);

    if(p2 != p1)
    {

        i = 0;
        i = rand() %str.size() + 1;
        p3 = str.substr(i - 1, 1);

        if(p3 != p2 && p3 != p1)
        {

        i = 0;
        i = rand() %str.size() + 1;
        p4 = str.substr(i - 1, 1);

            if(p4 != p1 && p4 != p2 && p4 != p3)
            {
            Looping_ = true;
            }
        }
    }
}
}
Le 26 septembre 2010 à 20:02:52

En passant, ce que tu utilises ne sont pas des pointeurs, mes des références. Les pointeurs sont un peu plus difficiles à utiliser.
Le 27 septembre 2010 à 22:10:54

Merci de la précision!

return avec plusieurs valeurs

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
  • Editeur
  • Markdown