Piocher aléatoirement dans un tableau

RollK -  
KX Messages postés 19031 Statut Modérateur -
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.
A voir également:

11 réponses

nicocorico Messages postés 846 Statut Membre 138
 
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
RollK
 
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
nicocorico Messages postés 846 Statut Membre 138
 
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
KX Messages postés 19031 Statut Modérateur 3 020
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
RollK
 
Salut,

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

Et c'est quoi .c_str() ?
0
KX Messages postés 19031 Statut Modérateur 3 020
 
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
RollK
 
d'accord, mais j'ai toujours cette erreur, je programme sus Code::block
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Ce n'est pas rand(time(0)); mais srand(time(0));
D'ailleurs c'est ce que j'avais mis...
0
RollK
 
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
KX Messages postés 19031 Statut Modérateur 3 020
 
Et bien laisse le srand, et donne les deux messages d'erreurs que tu as...
0
RollK
 
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
KX Messages postés 19031 Statut Modérateur 3 020
 
Remets #include <cstdlib> aussi pour voir ;-)
0
RollK
 
Ca marche ! Mais à quoi sert cette librairie ? iostream ne suffisait pas ?
0
KX Messages postés 19031 Statut Modérateur 3 020
 
<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
RollK
 
D'accord, merci et at.() sert à quoi ?
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Regarde la documentation : at
Si tu utilises listeNoms[nombreAleatoire] ça fera la même chose.
0