Menu

Comprendre un message d'erreur

-
Bonsoir,
je souhaite écrire un couple de valeurs de type " (x, f(x) ) " dans un fichier, et ce pour un grand nombre de valeurs de x. Ainsi, lors de l'écriture dans le fichier, j'ai écrit la ligne

Graph_Out << "(" << x << ", " << Polynomial(Coeff_Gird,x) << ")" << endl;


avec " Graph_out " la variable ofstream, et " Polynomial(Coeff_Gird,x) " la valeur f(x) provenant d'une fonction "Polynomial" prenant comme paramètre un tableau "Coeff_Gird".

Je me demandais si le fait qu'il y ait plusieurs chevrons " << " sur la ligne de "transcription" du couple de valeurs vers le fichier gênait l'écriture de celui-ci... cependant Code::Blocks ne se plaint pas lorsque j'applique "Build"; peut-être est-ce correct? :)

Ensuite je souhaiterais lire le contenu de mon fichier. Si ma vision de la chose est correcte, je dois sauvegarder le contenu d'une ligne du fichier dans une variable "intermédiaire", pour ensuite la lire grâce à un "cout"... voici ce que j'aurais écrit:

while(Graph_In.good)
       {
           Graph_In >> inter;
           cout << inter << endl;
       }


avec "Graph_In" la variable ifstream, et "inter" la variable pour stocker un court instant la ligne du fichier. Le problème est que je ne sais pas quel type de déclaration utiliser pour "inter" (dans le cas où ma méthode de lecture du fichier est correcte uniquement!). A l'intuition je l'ai déclaré comme un string; mais le message d'erreur suivant apparaît:

 error: cannot convert 'std::basic_ios<_CharT, _Traits>::good<char, std::char_traits<char> >' from type 'bool (std::basic_ios<char>::)() const' to type 'bool'|


Quelle est sa signification? Et quelle est/sont ma/mes fautes? Merci d'avance :p


Voici le morceau de code concerné pour plus de clarté:

ofstream Graph_Out ("Polynomial_Graph.txt", ios::trunc);
   if(Graph_Out.is_open())
   {
        for(double x=-3; x<=3; x+=0.001)
        {
            Graph_Out << "(" << x << ", " << Polynomial(Coeff_Gird,x) << ")" << endl;
        }
        Graph_Out.close();
   }
   else
   {
       cout << "erreur d'ouverture du fichier \" Polynomial_Graph.txt \" " << endl;
       return EXIT_FAILURE;
   }

   // partie facultative: lecture
   ifstream Graph_In ("Polynomial_Graph.txt");
   if(Graph_In.is_open())
   {
        string inter;
       while(Graph_In.good)
       {
           Graph_In >> inter;
           cout << inter << endl;
       }
   }
   else
   {
       cout << "erreur d'ouverture du fichier \" Polynomial_Graph.txt \" " << endl;
       return EXIT_FAILURE;
   }



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

Merci d'y penser dans tes prochains messages.


Merci d'y penser dans tes prochains messages.
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
402
Date d'inscription
dimanche 7 février 2016
Statut
Membre
Dernière intervention
17 mai 2019
43
2
Merci
on peut tout à fait enchaîner les
<<
et
>>
sont fait pour ça.
Cela fonctionne tout fait avec les
std::string
sauf que la séquence "
unIStream >> uneString
" ne va extraire qu'un mot pas toute une ligne (comme "%s" en C). Pour gérer une ligne entière il faut utiliser la fonction
std::getline()
comme préconisé par Dal.

Quant au code
while(Graph_In.good)
       {
           Graph_In >> inter;     // ne lit qu'un mot
           cout << inter << endl; // le transforme en ligne
       }
L'erreur vient de parenthèses manquantes,
good
est une fonction. Il faut écrire
while ( Graph_In.good() )
ou même plus simplement
while ( Graph_In ) {
    std::string  inter;
    std::getline( Graph_in , inter );
    std::cout << inter << std::endl;
}

Mais ici le but est de copier tout ce qui provient d'un flux vers un autre. On peut plus simplement écrire à la place
std::cout << Graph_in.rdbuf();

Dire « Merci » 2

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 39044 internautes nous ont dit merci ce mois-ci

[Dal]
Messages postés
5109
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
24 mai 2019
772 -
Merci de ces précisions Dalfab :-)
Commenter la réponse de Dalfab
Messages postés
5109
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
24 mai 2019
772
1
Merci
Salut Voking,

Je ne suis pas expert en C++, mais il me semble que les flux istream avec l'opérateur >> peuvent travailler sur les types suivants, parmi lesquels ne figure pas string :

http://www.cplusplus.com/reference/istream/istream/operator%3E%3E/

Pour récupérer une string à partir d'un tel flux, tu peux utiliser std::getline :

http://www.cplusplus.com/reference/string/string/getline/

Dal
Commenter la réponse de [Dal]