C++ récupérer un mot dans un .txt

dcd182 -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
salut tout le monde

alors voila mon problème que je viens vous exposer car même si j'ais trouver beaucoup de poste qui me semblais similaire je n'ais, âpre 2h30 de recherche toujours pas réussi.

je suis débutant et je tente de récupérer une variable sous forme de chaîne de caractère dans un .txt exactement comme ici
https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/16828-tp-realisation-dun-pendu#ss_part_3

sauf en c++, sinon exactement la même chose, j'ais mon dico de mot tout bien ranger et je veux en récupérer un mot aléatoirement grâce a ma fonction :

void nbalea(int&nba,int&nbmots)
{
srand((unsigned)time(0));
int lowest=1, highest=100;
int range=(highest-lowest)+1;
for(int index=0; index<20; index++){
nba = lowest+int(range*rand()/(RAND_MAX + 1.0));
}
}

merci d'avance de votre aide

3 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Voici comment on peut extraire une ligne dans un fichier.
Pour plus d'information sur la manipulation de fichiers regarde cplusplus.com

#include <iostream>
#include <fstream>

std::string extraireLigne(const std::string &nomFichier, const unsigned numeroLigne)
{
    std::ifstream fichier(nomFichier.c_str(), std::ios::in); 
    
    if (!fichier.is_open())
    {
        std::cerr << nomFichier.c_str()
                  << " n'a pas pu être ouvert en lecture" << std::endl;
        return "";
    }
    
    std::string ligne("");
    for (unsigned i=0; i<numeroLigne; i++)
    {
        if (fichier.eof())
        {
            std::cerr << "Impossible de lire la ligne " 
                      << numeroLigne << std::endl;
                      << nomFichier.c_str()
                      << " ne contient que " << i << " lignes" << std::endl;
            break;
        }
        else fichier.getline((char*) ligne.c_str(),255);
    }
    
    fichier.close();
    return ligne.c_str();
}
0
dcd182
 
j'ais pas le temps de tester tout de suite, mais sa ma l'aire bien

grand merci a toi je test sa se soir
0
dcd182
 
bon j'ais pas encore fini mais déjà sa m'affiche la ligne que je voulais afficher il me reste juste a le modifier et a le mètre dans mon programme et sa devrai être bon
il y a surement plein de truc inutile ou mal fait a rectifier mais sa a l'air de marcher
je repasse demain pour poster ma version final
merci KX

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

void main()
{
int i;
const string dico;
int numeroLigne=3;
ifstream myfile ("dico.txt");
if (!myfile.is_open())
{
cerr << "dico.txt"
<< " n'a pas pu être ouvert en lecture" <<endl;
}
string ligne("");
for (i=0; i<numeroLigne; i++)
{
if (myfile.eof())
{
cerr << "Impossible de lire la ligne "
<< numeroLigne <<endl
<< "dico.txt"
<< " ne contient que " << i << " lignes" <<endl;
break;
}
else myfile.getline((char*) ligne.c_str(),255);
}
myfile.close();
cout <<ligne.c_str()<< endl;
}
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Tu aurais également pu reprendre ma fonction telle quelle, sans avoir à la modifier :

int main() 
{ 
   std::cout << extraireLigne("dico.txt", 3).c_str() << std::endl;
}
0