Lecture de fichier .txt [Résolu/Fermé]

Signaler
Messages postés
34
Date d'inscription
dimanche 10 mars 2013
Statut
Membre
Dernière intervention
26 avril 2020
-
Messages postés
9687
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
21 juin 2020
-
Salut tout lmonde me vla moi et mes question !
Tout d'abord, le code :

#include <iostream>
using namespace std;
#include <stdio.h>
string Question(".");
int LineQuestion(-1);
int main ( void )
{
     static const char filename[] = "NomDuFichier.txt";
     FILE *file = fopen ( filename, "r" );
     if ( file != NULL )
     {
        char line [ 99999 ]
      cin>>Question;
        while ( fgets ( line, sizeof line, file ) != NULL ) 
        {
            if (line==Question)
            {
                printf("%s", line);
            }

        }
        fclose ( file );
     }
     else
     {
        perror ( filename ); 
     }
 return 0;
}


Le problème est a ce niveau la :

if (line==Question)

Par line==Question je voudrais sous entendre "le contenu de la ligne = la question posé"

Mais line est en fait le nombre de la ligne...!
Enfin c'est ce que je crois comprendre... Alors voila ma question : y a t-il une fonction permettant d'attribuer le contenu des ligne lue dans une variable x qui sera remplacé après vérification avec Question genre x=contenu ligne ?

Seconde question :

Pour cette partie :

while ( fgets ( line, sizeof line, file ) != NULL ) 
        {
            if (line==Question)
            {
                printf("%s", line);
            }


Y a t-il moyen de faire Tant que fgets() etc... ET si x différent de Question ? ça me permettrait de stopper la boucle while lorsque la ligne aura été trouvé !


Je vous remercie a l'avance pour ceux qui se donneront la peine de réfléchir a ma question qui me paraît impossible !!

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

Messages postés
9687
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
21 juin 2020
1 193
Salut,
je sais bien que le C++ c'est hyper souple et qu'on fait un peut ce qu'on veux. Mais il faudrait te décider entre C et C++...
Bref, tu en es à faire du C++, je te conseil vivement de laisser tomber les const char et de faire des string.
Regarde aussi du coté de cin, il me semble qu'il contient la methode "getline".
Ton code est trop brouillon, efface tout et recommence. Défini tranquillement les variables dont tu as besoin.
N'hésite pas à faire plein d'impression des chaines que tu lis afin de vérifier ce qu'elles contiennent.
bon chance
Messages postés
34
Date d'inscription
dimanche 10 mars 2013
Statut
Membre
Dernière intervention
26 avril 2020
1
Salut !
Merci de ta réponse en premier lieu :D
Changer les const char en string ... char n'est pas suffisement approprié dans cette situation ?
J'ai déja essayé d'y aller a coup de getline après tout c'est plus pratique que cin, mais sois mon IDE sois mon compilateur ne reconnaît pas getline... a moins que je doive me servir de la bibliothèque SDL ?
Si je me souviens bien, on fait appel a getline comme ça non ? : getline(VariableCible);
Mais lorsque je l'utilise, le message d'erreur est : no matching function for call to 'getline(std::string&)'
Pour le moment mon code contient deux include : iostream et stdio; j'avais lu quelque part qu'il fallait rajouter un include getline mais sans résultat...


Sinon ya vraiment aucune fonction pour attribuer le contenu de la ligne lue a une variable ?

Encore merci pour les futures réponses :D
Messages postés
9687
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
21 juin 2020
1 193
http://www.cplusplus.com/reference/string/string/getline/
ne pas hésiter à lire et à chercher dans la doc, beaucoup de fonctions utile quotidiennement y sont.
Mon préférer c'est celui là : https://en.cppreference.com/w/cpp : tu regardes les différentes classes et leurs membres et rapidement ça se passe bien.