can't see my data stored in a (VECTOR/STRUCT)

Jun 9, 2022 at 5:36pm
my code is bellow. I'm trying to call the data stored in the vector (cout command in the last line) and when I run this code it just prints "LECTURA FINALIZADAok1".I would appreciate any help on how to call the data, thanks.


# include <iostream>
# include <fstream>
# include <vector>
using namespace std;


//TUPLA REPUBLICANOS/DEMOCRATAS
struct election_2020 {// revisado
int total_votos, total_votantes, republicanos , democratas, total_poblacion;
string estados ;
float porcentaje_poblacion, porcentaje_votantes;
;};


//TUPLA RAZA
struct race_sex {
string estados;
int sexo_raza, poblacion_total, votantes_totales, total_registrado;
int votos_totales;
float porcentaje_registrado, porcentaje_votantes, porcentaje_poblacion;
;};


//TUPLA EDAD
struct age {
string estados;
int edad, poblacion_total, votantes_totales,votos_totales;
float porcentaje_ciudadano, porcentaje_votos_totales;
;};

typedef vector <election_2020> vector_elec ; // revisado
typedef vector <race_sex> vector_raza; // revisado
typedef vector <age> vector_edad; // revisado

//LECTOR DATOS
void leer_datos(vector_elec& L_elec,vector_raza& L_raza, vector_edad& L_edad ){ // revisado

ifstream datos_elec( "elecciones.txt ");
election_2020 E;

while ( datos_elec >>E.estados >>E.total_poblacion >>E.total_votantes >>E.total_votos>>E.porcentaje_poblacion>>E.porcentaje_votantes>>E.democratas>>E.republicanos )
{
L_elec.push_back(E);
}
ifstream datos_raza( "raza.txt ");
race_sex R;

while( datos_raza >> R.estados >> R.sexo_raza >> R.poblacion_total >> R.votantes_totales >> R.total_registrado >> R.porcentaje_registrado >> R.votos_totales >> R.porcentaje_votantes >> R.porcentaje_poblacion)
{
L_raza.push_back(R);
}

ifstream datos_edad( "edad.txt ");
age A;

while ( datos_edad>> A.estados >> A.poblacion_total >> A.votantes_totales >> A.votos_totales >> A.porcentaje_votos_totales >> A.porcentaje_ciudadano ){
L_edad.push_back(A);
}
cout<<"LECTURA FINALIZADA";
}


int main() {

vector_elec L_elec;
vector_raza L_raza;
vector_edad L_edad;

leer_datos(L_elec,L_raza,L_edad);
cout<<"ok1"<<L_elec[1].estados<<"ok2"<<endl;;
}
Jun 9, 2022 at 6:31pm
what do you get if you do this:

for(auto a: L_elec)
{
cout<<"ok1"<<a.estados<<"ok2"<<endl;
}

you are only printing one item, the second one actually (the first one is [0], not [1]).
Last edited on Jun 9, 2022 at 6:32pm
Jun 9, 2022 at 6:53pm
Please learn to use code tags, they make reading and commenting on source code MUCH easier.

How to use code tags: http://www.cplusplus.com/articles/jEywvCM9/

There are other tags available.

How to use tags: http://www.cplusplus.com/articles/z13hAqkS/

HINT: you can edit your post and add code tags.

Some formatting & indentation would not hurt either

Your 3 vectors defined in main are probably not being filled in the function so they are likely still empty after the function ends, there are no tests to make sure the data files are actually opened for reading.

The data files fail to open and the code still goes ahead trying to read data that doesn't exist.
Last edited on Jun 9, 2022 at 7:07pm
Jun 9, 2022 at 7:05pm
Whenever you open a disc file you should always test it was opened. If not, don't try to process the file. Especially if the file is opened to read.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>

int main()
{
   // try to open a file that doesn't exist
   std::ifstream bogus("no_data.txt");

   // check for file open status
   if (bogus)
   {
      std::cout << "File was opened successfully!\n";
   }
   else
   {
      std::cout << "File was NOT opened successfully!\n";

      return -1; // exit with "error", no need to close an unopened file
   }

   bogus.close();  // it pays to be neat with open files
}
File was NOT opened successfully!

This is merely a very crude example, how you handle file I/O problems is up to you.
Last edited on Jun 9, 2022 at 7:14pm
Jun 23, 2022 at 8:38am
You declare the initial size of a std::vector in its constructor, so one way you can accomplish this is:

struct element
{
char ulica[10];
std::vector<int> dane;
int wolne;
int w;
element *lewy, *prawy, *ojciec;

element() : dane(3) {}
};
If you don't include the constructor, the initial size of the vector will be 0. In any event, to add an element to the back, just use tmp2->dane.push_back(number); This will add the value in number to the back of the vector tmp2->dane which may result in a change in the amount of allocated memory for the vector instance.
Jun 23, 2022 at 11:01am
@George P
Beware always/never rules. Most of the time, if properly structured, you should not have to explicitly test whether a read file was opened.

And don’t return negative numbers from main(). Return zero for success, non-zero (1..127) for failure.
Last edited on Jun 23, 2022 at 11:02am
Jun 23, 2022 at 11:13am
bogus.close(); // it pays to be neat with open files


That contradicts the idea of RAII.
Jun 23, 2022 at 11:42am
L21. This isn't needed as file streams are closed automatically when the stream goes out of scope - RAII.

Topic archived. No new replies allowed.