0

Hi, i have problem .I want to load infomrations abour person from text file. There is name, surname and some unlimited poin.We dont know how many points there is. i try to put this informations into vector<struct> person

struct{
string name
string surname
vector<double> points
}

than i want to load it from .txt but i have problem with this cause i dont know how many points there is. If i know for example, there is 4 points i use

struct{
string name
string surname
double point1
double point2
double point3
double point4
}

here is what i have for now. dont work>} please help, sorry for my english

#include "stdafx.h"
#include <string>
#include <vector>
#include <sstream>
#include <iostream>
#include <fstream>
using namespace std;


struct OSOBA {
    string meno;
    string priezvisko;
    vector<double> body;
};

int _tmain(int argc, _TCHAR* argv[])
{
    ifstream ifsSubor;
    ifsSubor.open("vstup.txt");
    string sRiadok;
    vector<OSOBA> osoby;
    double bod;
    OSOBA o;
    while(! ifsSubor.eof())
    {
        getline(ifsSubor,sRiadok);
        istringstream istrRiadok(sRiadok);
        istrRiadok>> o.meno;
        istrRiadok>> o.priezvisko;
        istrRiadok>> bod;
        o.body.push_back(bod);

    osoby.push_back(o);

int i=0;
    vector<OSOBA>::iterator it;

    for(it = osoby.begin(); it != osoby.end(); ++it)
    {
        cout.width(15);
    cout <<left << (*it).priezvisko <<"\t" << (*it).meno<<"\t" << (*it).body<<endl; 

    }
        return 0;


    }
}
3
Contributors
7
Replies
42
Views
2 Years
Discussion Span
Last Post by NathanOliver
0

Oh sorry i forgot .txt looks like this

Mrkvicka Jozef 2 1.75 2.1 0.4 1 0.49 1.27 
Hrasko Jan 0.1 0.38 1 1.2
Mladek Peter 1.6 0.4 2 1.3 1.8
Petrzlen Robert 0.6 0 1.1 1,1 0.6 0.59 
Horvath Ivan 1.6 0.8 0.7 1.3

for example mrkvicka is surname, jozef is name ...its in my native language

0

Well with the struct that you have and the way the file is formatted I would use the following approach.

int main()
{
    ifstream ifsSubor;
    ifsSubor.open("vstup.txt");
    string sRiadok;
    vector<OSOBA> osoby;
    double bod;
    OSOBA o;
    stringstream ss;
    while(getline(ifsSubor, sRiadok))  // use getline to control loop instead of eof()
    {
        ss << line;  // load line into strinstream
        ss >> o.meno;  // get surname
        ss. >> o.priezvisko;  // get first name
        while (ss >> bod)  // while there are points left in ss add them to body
        {
            o.body.push_back(bod);
        }
        osoby.push_back(o);
    }
    //...
0

I dont know but it dont work properlly
my console output is

Jozef Mrkvicka
Jozef Mrkvicka
Jozef Mrkvicka
Jozef Mrkvicka
Jozef Mrkvicka

and my code is

#include "stdafx.h"
#include <string>
#include <vector>
#include <sstream>
#include <iostream>
#include <fstream>
using namespace std;


struct OSOBA {
    string meno;
    string priezvisko;
    vector<double> body;
};

int _tmain(int argc, _TCHAR* argv[])
{
    vector<double> body;
    ifstream ifsSubor;
    ifsSubor.open("vstup.txt");
    string sRiadok;
    vector<OSOBA> osoby;
    double bod;
    OSOBA o;
    stringstream ss;

while(getline(ifsSubor, sRiadok))
    {
        ss<<sRiadok;
        ss >> o.meno;
        ss >> o.priezvisko;

        while (ss >> bod) 
        {
            o.body.push_back(bod);

        }
    osoby.push_back(o);
    }

     int i=0;
    vector<OSOBA>::iterator it;

for(it = osoby.begin(); it != osoby.end(); ++it)
    {
        cout.width(5);
        cout <<left << (*it).priezvisko <<"\t" << (*it).meno; 

        for (int i=0; i<body.size(); i++)
            cout << body[i] << ", ";
        cout<<endl;
    }
cout<<endl;
        return 0;
}
0

You need to put OSOBA o; in the scope of the while loop and reset the stringstream.

    while(getline(ifsSubor, sRiadok))
    {
        // scope OSOBA instance
        OSOBA o;

        ss << sRiadok;
        ss >> o.meno;
        ss >> o.priezvisko;

        while (ss >> bod) 
        {
            o.body.push_back(bod);

        }
        // reset ss
        ss.str(std::string());
        ss.clear();

        osoby.push_back(o);
    }

In the iteration of the osoby vector, you're not referencing the instance while iterating the vector of doubles.

for (size_t i=0; i<it->body.size(); i++)
            cout << it->body[i] << ", ";
This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.