Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableau dynamiques et lecture fichier

Tableau not declared in this scope

    18 mai 2019 à 17:33:34

    Bonjour,

    je débute en c++

    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

    Robert

    • Partager sur Facebook
    • Partager sur Twitter
      18 mai 2019 à 19:12:01

      Salut,

      Ce n'est pas normal qu'il ne lise que les lignes paires, met nous le code que tu as mis ici.

      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        18 mai 2019 à 19:45:28

        Salut

        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

        Pour poster ton code, utilises les balises. Pour cela clique sur le bouton qui ressemble à "</>", choisis "C++" et colle ton code dedans.

        • Partager sur Facebook
        • Partager sur Twitter
          18 mai 2019 à 20:19:12

          Merci de votre assistance.

          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;
          }

          *************************************************

          "Afrique","Afrique_du_Sud","Pretoria",
          "Afrique","Algerie","Alger",
          "Afrique","Angola","Luanda",
          "Afrique","Bénin","Porto_Novo",
          "Afrique","Botswana","Gaborone",
          "Afrique","Burkina_Faso","Ouagadougou",
          "Afrique","Burundi","Bujumbura",
          "Afrique","Cameroun","Yaoundé",
          "Afrique","Cap_Vert","Praia",
          "Afrique","Centrafrique","Bangui",
          "Afrique","Comores","Moroni",
          "Afrique","Congo-Brazzaville","Brazzaville",
          "Afrique","Cote_d_Ivoire_Yamoussoukro",
          "Afrique","Djibouti","Djibouti",
          "Afrique","Egypte","Le_Caire",
          "Afrique","Erythrée","Asmara",
          "Afrique","Ethiopie","Addis-Abeba",
          "Afrique","Gabon","Libreville",
          "Afrique","Gambie","Banjul",
          "Afrique","Ghana","Accra",
          "Afrique","Guine_Equatoriale","Malabo",
          "Afrique","Guinee","Conakry",
          "Afrique","Guinee-Bissau","Bissau",
          "Afrique","Ile_Maurice","Port-Louis",
          "Afrique","Kenya","Nairobi",
          "Afrique","Lesotho","Maseru",
          "Afrique","Liban","Beyrouth",
          "Afrique","Liberia","Monrovia",
          "Afrique","Libye","Tripoli",
          "Afrique","Madagascar","Antananarivo",
          "Afrique","Malawi","Lilongwe",
          "Afrique","Mali","Bamako",
          "Afrique","Maroc","Rabat",
          "Afrique","Mauritanie","Nouakchott",
          "Afrique","Mozambique","Maputo",
          "Afrique","Namibie","Windhoek",

          • Partager sur Facebook
          • Partager sur Twitter
            18 mai 2019 à 23:48:46

            Normal …
            while (getline(monFlux,ligneCapitale))	// lecture lignes impaires
            {
            	getline(monFlux,ligneCapitale);		// lecture lignes pairs
            	/*
            		Traitements lignes pairs
            	*/
            }
            • Partager sur Facebook
            • Partager sur Twitter
              19 mai 2019 à 9:27:45

              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é
              }
              • Partager sur Facebook
              • Partager sur Twitter
                20 mai 2019 à 7:45:44

                merci messieurs,

                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 ?

                merci et bonne semaine à vous

                • Partager sur Facebook
                • Partager sur Twitter
                  20 mai 2019 à 17:36:57

                  Re,

                  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.:o

                  • Partager sur Facebook
                  • Partager sur Twitter

                  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.
                  • Editeur
                  • Markdown