Piocher aléatoirement dans un tableau

Bonjour, je voudrais tirer aléatoirement une chaîne de caractère contenu dans un tableau, je débute et j'ai fait ce code qui, malheureusement ne marche pas... :

#include <iostream>
#include <vector>
#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
int const Prenom(5);
vector<string> listeNoms(Prenom);

   listeNoms[0] = 'Quentin';
   listeNoms[1] = 'Charles';
   listeNoms[2] = 'Jean';
   listeNoms[3] = 'Mathieu';
   listeNoms[4] = 'Theodule';
   listeNoms[5] = 'Marc';


string nomAleatoire;


   for(int i(0); i<listeNoms; ++i)
   {
      nomAleatoire = listeNoms[i];
   }


srand(time(0));

    nomAleatoire = rand() % 5;

   cout << "Elève choisit " << nomAleatoire << endl;

   return 0;
}


Voili voilou, si vous pouviez m'expliquer, ce serait sympa, merci.

11 réponses

  1. Je connais rien au c++, alors je t'aide comme je peux, et dans ce qui me parait flagrant, c'est que la boucle ne sers à rien et qu'il faut que tu accède à ton tableau avec pour indice le nombre aléatoire... ça doit donner un truc comme ça :
    #include <iostream>
    #include <vector>
    #include <ctime>
    #include <cstdlib>
    using namespace std;
    
    int main()
    {
    int const Prenom(5);
    vector<string> listeNoms(Prenom);
    
       listeNoms[0] = 'Quentin';
       listeNoms[1] = 'Charles';
       listeNoms[2] = 'Jean';
       listeNoms[3] = 'Mathieu';
       listeNoms[4] = 'Theodule';
       listeNoms[5] = 'Marc';
    
    string nomAleatoire;
    
    srand(time(0));
    
       nomAleatoire = listeNoms[rand() % 5];
    
       cout << "Elève choisit " << nomAleatoire << endl;
    
       return 0;
    }
    0
    1. Salut, alors je ne sais pas ce que j'ai fait, mais j'ai mélangé C et C++ il me semble au niveau des includes...

      En tout cas, je lance ton programme, puis après, j'ai message d'erreur qui me dit :" Programme a cessé de fonctionner..."

      Alors, j'enlève #include <ctime> et #include <cstdlib>, mais là après mon programme ne se lance et affiche pleins d'erreur.

      Merci de ton aide.
      0
      1. Il faut peut-être que tu relances un sujet là, car au vu de mes notions en C, je ne peux t'aider d'avantage et ceux qui peuvent t'aider doivent penser que quelqu'un s'en occupe déjà !
        Pense à préciser dans l'intitulé que c'est du C...
        0
        1. Modérateur
          1)
          int const Prenom(5);
          Tu as 6 valeurs dans ton tableau pas 5, alors autant mettre 6 non ?
          Pourquoi appeler ta variable Prenom alors que c'est un entier ?

          2)
          listeNoms[0] = 'Quentin';
          Une chaîne de caractères ça se met entre guillemets pas avec des apostrophes.

          3)
          string nomAleatoire;
          
          for(int i=0; i<listeNoms; i++)
          {
              nomAleatoire = listeNoms[i];
          }
          listeNoms est un vector, pas un entier, tu ne peux pas faire i<listeNoms.
          De plus ta boucle ne sers à rien, tu ne fais que récupérer le dernier nom de la liste dont tu ne te sers pas ensuite.

          4)
          nomAleatoire = rand() % 5;
          Ce n'est toujours pas 5, mais 6. De plus comme l'a indiqué Nicocorico, rand%5 renvoit un entier pas une string.

          5)
          cout << "Elève choisit " << nomAleatoire  << endl

          Tu ne peux pas utiliser des string avec cout, il faut faire une conversion en char*

          6)
          #include <iostream>
          #include <vector>
          #include <ctime>
          
          using namespace std;
          
          int main()
          {
          	srand(time(0));
          
          	vector<string> listeNoms;
          	
          	listeNoms.push_back("Quentin");
          	listeNoms.push_back("Charles");
          	listeNoms.push_back("Jean");
          	listeNoms.push_back("Mathieu");
          	listeNoms.push_back("Theodule");
          	listeNoms.push_back("Marc");
          
          	int nombreAleatoire = rand() % listeNoms.size();
          	string nomAleatoire = listeNoms.at(nombreAleatoire);
          
          	cout << "Elève choisit " << nomAleatoire.c_str() << endl;
          
          	return 0;
          }
          0
          1. Salut,

            Merci beaucoup, mais je rencontre une erreur à la ligne 9, rand(time(0)); "was not déclared in this scope"
            0
            1. Modérateur
              C'est parce que tu as enlevé <ctime>, il faut le garder.
              0
          2. non, je l'ai laissé, j'ai entièrement copié le code que tu m'as transmis.

            Et c'est quoi .c_str() ?
            0
            1. Modérateur
              Moi je n'ai pas d'erreur.
              c_str() c'est la conversion d'un string en char* pour l'affichage avec cout dont je parlais en 5)
              0
          3. d'accord, mais j'ai toujours cette erreur, je programme sus Code::block
            0
            1. Modérateur
              Ce n'est pas rand(time(0)); mais srand(time(0));
              D'ailleurs c'est ce que j'avais mis...
              0
          4. Oui oui, mais en fait j'avais deux erreurs avec srand, alors j'ai mis rand pour voir,et ça m'a mis une seule erreur.
            0
            1. Modérateur
              Et bien laisse le srand, et donne les deux messages d'erreurs que tu as...
              0
          5. Oui, voici :

            C:\Users\RollK\Projets\ZIMZIM\main.cpp||In function 'int main()':|
            C:\Users\RollK\Projets\ZIMZIM\main.cpp|9|error: 'srand' was not declared in this scope|
            C:\Users\RollK\Projets\ZIMZIM\main.cpp|20|error: 'rand' was not declared in this scope|
            ||=== Build finished: 2 errors, 0 warnings ===|
            0
            1. Modérateur
              Remets #include <cstdlib> aussi pour voir ;-)
              0
          6. Ca marche ! Mais à quoi sert cette librairie ? iostream ne suffisait pas ?
            0
            1. Modérateur
              <iostream> c'est pour cout et endl
              <ctime> pour time
              <cstdlib> pour rand et srand (mais chez moi elle est peut-être inclus automatiquement)
              <vector> pour vector
              <string> pour string mais il est inclus dans <iostream>, et <vector> donc ce n'est pas nécessaire de le rajouter
              0
          7. D'accord, merci et at.() sert à quoi ?
            0
            1. Modérateur
              Regarde la documentation : at
              Si tu utilises listeNoms[nombreAleatoire] ça fera la même chose.
              0