Piocher aléatoirement dans un tableau
RollK
-
KX Messages postés 19031 Statut Modérateur -
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... :
Voili voilou, si vous pouviez m'expliquer, ce serait sympa, merci.
#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:
- Piocher aléatoirement dans un tableau
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Imprimer un tableau excel - Guide
- Tableau croisé dynamique - Guide
11 réponses
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;
}
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.
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.
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...
Pense à préciser dans l'intitulé que c'est du C...
1)
Pourquoi appeler ta variable Prenom alors que c'est un entier ?
2)
3)
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)
5)
Tu ne peux pas utiliser des string avec cout, il faut faire une conversion en char*
6)
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;
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
Merci beaucoup, mais je rencontre une erreur à la ligne 9, rand(time(0)); "was not déclared in this scope"
Merci beaucoup, mais je rencontre une erreur à la ligne 9, rand(time(0)); "was not déclared in this scope"
non, je l'ai laissé, j'ai entièrement copié le code que tu m'as transmis.
Et c'est quoi .c_str() ?
Et c'est quoi .c_str() ?
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)
c_str() c'est la conversion d'un string en char* pour l'affichage avec cout dont je parlais en 5)
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.
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 ===|
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 ===|