Comprendre un message d'erreur
Voking
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
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
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:
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:
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é:
Merci d'y penser dans tes prochains messages.
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.
A voir également:
- Comprendre un message d'erreur
- Comment recuperer un message supprimé sur whatsapp - Guide
- Epingler un message whatsapp - Accueil - Messagerie instantanée
- Message supprimé whatsapp - Guide
- Message absence thunderbird - Guide
- Message du pere noel gratuit whatsapp - Accueil - Messagerie instantanée
2 réponses
on peut tout à fait enchaîner les
Cela fonctionne tout fait avec les
Quant au code
Mais ici le but est de copier tout ce qui provient d'un flux vers un autre. On peut plus simplement écrire à la place
<<et
>>sont fait pour ça.
Cela fonctionne tout fait avec les
std::stringsauf 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,
goodest 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();
[Dal]
Messages postés
6205
Date d'inscription
Statut
Contributeur
Dernière intervention
1 105
Merci de ces précisions Dalfab :-)
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
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