Partage
  • Partager sur Facebook
  • Partager sur Twitter

return avec plusieurs valeurs

Sujet résolu
    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:)
    • Partager sur Facebook
    • Partager sur Twitter
      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.
      • Partager sur Facebook
      • Partager sur Twitter
        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?
        • Partager sur Facebook
        • Partager sur Twitter
          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 ;)
          • Partager sur Facebook
          • Partager sur Twitter
            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.
            • Partager sur Facebook
            • Partager sur Twitter
              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.
              • Partager sur Facebook
              • Partager sur Twitter
                25 septembre 2010 à 8:34:56

                ou alors des pointeurs, tout simplement ...
                • Partager sur Facebook
                • Partager sur Twitter
                  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;
                              }
                          }
                      }
                  }
                  }
                  
                  • Partager sur Facebook
                  • Partager sur Twitter
                    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.
                    • Partager sur Facebook
                    • Partager sur Twitter

                    return avec plusieurs valeurs

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown