mon programme doit lire un fichier ligne à ligne pour remplir un tableau dynamique. Il le fait car j'affiche aussi sur l'écran et .size du fchier est incrémenté. Mais, j'ai deux problèmes :
- 1 le "getline (leFichierLu, string)" ne lit que les lignes paires du fichier,
- 2 le tableau dynamique est correctement incrémenté dans le "if" qui teste la validité du fichier, mais quand je veux le relire, après le "if" et le "else", j'ai une erreur "tableau not declared in this scope".
Je remercie d'avance qui voudra bien m'éclairer.
J'aurais aime insérer une copie écran du source, mais je ne sais pas le faire. Aussi... si là aussi vous pouviez me renseigner. Merci
les 2 lignes qui déclarent l'erreur "not declared in scope sont les 2 qui précèdent "return (0).
Je suppose que pour identifier le problème des lignes paires i vous faut le fichier lu. il est long, je vous en mets un extrait pour info en fin de post.
Je précise que ce programme n'est qu'un exercice de style pour apprendre à utiliser les tableaux, fichiers, while et la syntaxe.
merci a vous.
le programme :
#include <iostream> //dialogue console #include <fstream> //dialogue fichier sur disque #include <string> //on utilisera les chaînes #include <vector> //on utilisera les tableaux dynamiques using namespace std;
int main() /* il existe le ficher (capitales.txt) contenant ~ 200 lignes composées chacune de "continent", "pays", "capitale". Ce programme lit le fichier ligne à ligne, écrit chaque ligne à l'écran puis rajoute la ligne à un tableau dynamique, et enfin écrit le tableau à l'écran*/ { ifstream monFlux("C:/Users/Bob/projects/monprogramme/capitales.txt");
if(monFlux) //monflux= chemin complet d'accès au fichier { vector <string> tableauCapitale; //tableau dyn où seront stockés les lignes string ligneCapitale; //variable de récupération les lignes
while (getline(monFlux,ligneCapitale)) //lit un ligne du fichier monFlux et teste la fin fichier { /*tant que le getline ne renvoie pas le booléen eol de fin de fichier, il renverra les lignes dans la chaîne ligneCapitale */ getline(monFlux,ligneCapitale); //lecture d'un ligne "continent", "pays", "capitale" cout<< ligneCapitale << endl; //on imprime le ligne tableauCapitale.push_back (ligneCapitale); //on ajoute une ligne au tableau cout << tableauCapitale.size() <<" "; // prouve que le tableau et alimenté } } else { cout << "ERREUR: Impossible d'ouvrir le fichier." << endl; } for (int i; i < tableauCapitale.size(); ++i) { cout<< tableauCapitale [i]<< endl; //onimprime le tableau ligne à ligne } return 0; }
Comme te l'a montré @Deedolith, tu lis une ligne sans la traiter. A chaque fois que tu appelles getline(monFlux, ligneCapitale), tu lis la ligne suivante dans le flux.
while (getline(monFlux,ligneCapitale))
{
getline(monFlux,ligneCapitale); // <-- Pas besoin de cette ligne, la nouvelle ligne est déjà dans ta variable "ligneCapitale".
cout<< ligneCapitale << endl; //on imprime le ligne
tableauCapitale.push_back (ligneCapitale); //on ajoute une ligne au tableau
cout << tableauCapitale.size() <<" "; // prouve que le tableau et alimenté
}
je pensais qu'associée au "while" la commande ne servait qu'à tester le fin de fichier.
Quant à l'erreur "tableau was not declared in this scope". découlant de la réutilisation du tableau dans les 2 dernières lignes, auriez vous une idée à me proposer pour l'éviter ?
Un scope c'est un bout de code délimité par des { }, comme ce qu'il y a après les conditions ou les boucles.
Depuis un scope, tu peux accéder aux variables qui ont été déclarées dans le scope ou un scope "parent", mais tu ne peux pas accéder une variable ou une fonction contenue dans un scope depuis le scope parent.
L'erreur me semble claire. D'ailleurs, je n'ai pas vu de variable qui s'appelle "tableau" dans ton code.
Tableau dynamiques et lecture fichier
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html