Cześć. Mam problem z kodem. Zadaniem jest wyświetlić drużyny, w tym wczytaną z pliku i zapisać wszystkie drużyny do plików. Problem występuje po pętli while w mainie, sama ona się wykonuje, lecz niestety nic za nią już nie. Myślę, że powodem może być split przy odczytywaniu pliku, jednak nie za bardzo wiem jak ten problem rozwiązać. Zawodnicy w pliku txt oddzieleni są średnikami, jeden pod drugim (inna konfiguracja również nie działa). Czy ktoś mógłby mnie dokładniej nakierować w czym problem? Poniżej udostępniam kod
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <fstream>
#include <ctime>
using namespace std;
class Player //klasa Player, opisująca zawodnika
{
public: //publiczna
Player(string name, string surname, int height, vector<string> skills);
Player(string);
string line;
string to_string();
void change_height(int height);
Player(const Player& source);
vector<string> split(string line, char delimiter) //nazwy
{
vector<string>data;
string character;
stringstream charStream(line);
while (getline(charStream, character, delimiter))
{
data.push_back(character);
}
name=data[0];
surname=data[1];
height=stoi(data[2]);
for (int i=3; i<8; i++)
{
skills.push_back(data[i]);
}
return data;
}
private: //prywatna
string name;
string surname;
int height;
vector<string> skills;
};
Player::Player(string line) //konstuktor pliku
{
this->line=line;
}
Player::Player(string name, string surname, int height, vector<string> skills)
{
this->name=name;
this->surname=surname;
this->height=height;
this->skills=skills;
};
Player::Player(const Player &source) //konstruktor kopiujący
{
this->name=source.name;
this->surname=source.surname;
this->height=source.height;
this->skills=source.skills;
};
void Player::change_height(int height) //zmiana wzrostu
{
this->height=height;
};
string Player::to_string() //to_string
{
stringstream s;
s<< name << " "<<
surname<<" "<<
height<<" ";
for(int i = 0; i<5; i++){
s<<skills[i]<<" ";
};
cout<<" "<<endl;
return s.str();
}
class Group
{
public:
vector<Player*> players_c;
vector<Player*>players;
Group(vector<Player*>players) //konstuktor
{
this->players=players;
}
Group(const Group&, vector<Player*> players_c) //copy
{
this->players=players_c;
}
string show()
{
stringstream data;
for(auto player: players)
{
data<<player->to_string();
}
return data.str();
}
void write(string team_name)
{
time_t curr_time;
curr_time = time(NULL);
struct tm now;
localtime(&curr_time);
stringstream time;
cout<<(now.tm_year + 1900)<<'-'
<<(now.tm_mon + 1)<<'-'<<now.tm_mday<<endl
<<now.tm_hour<<':'<<now.tm_min<<':'<<now.tm_sec<<endl;
stringstream filename;
filename<<"Team"<<"_"<<team_name<<"_"<<time.str()<<".txt"<<endl;
ofstream file;
file.open(filename.str());
file<<show();
file.close();
}
};
int main()
{
//Zawodnicy 1 druzyny:
Player p1("Grzegorz", "Smolarz", 180, {"Podania", "wrzutki", "dosrodkowania", "strzaly z daleka", "rzuty karne"});
Player p2("Tomasz", "Balon", 188, {"Podania prostopadle", "ruletka", "glowki", "strzaly z bliska", "rzuty rozne"});
Player p3("Cezary", "Siwek", 170, {"Podania rownolegle", "loby", "rzuty rozne", "strzaly z daleka", "rzuty karne"});
Player p4("Slawomir", "Motyl", 185, {"Sprint", "drybling", "dosrodkowania", "glowki", "rzuty karne"});
Player p5(p1);
//Zawodnicy 2 druzyny:
Player p6("Filip", "Sierpien", 170, {"Loby", "wrzutki", "dosrodkowania", "wykonczenia", "podania"});
Player p7("Slawomir", "Wrona", 180, {"Podania", "silne strzaly", "wytrzymalosc", "rzuty rozne", "rzuty wolne"});
Player p8("Hubert", "Kolan", 190, {"Sprint", "wrzutki", "wykonczenia", "wslizgi", "rzuty rozne"});
Player p9("Tomasz", "Pas", 199, {"Podania", "wrzutki", "sprint", "wykonczenia", "rzuty wolne"});
Player p10("Zbigniew", "Nowak", 195, {"Sprint", "wrzutki", "przejecia", "dosrodkowania", "podania", "glowki"});
vector<Player*> TeamOne={&p1,&p2,&p3,&p4,&p5}; //wektor 1 druzyny
vector<Player*> TeamTwo={&p6,&p7,&p8,&p9,&p10}; //wektor 2 druzyny
vector<Player*> TeamThree(TeamTwo); //wektor 3 druzyny, kopii drugiej
cout<<"Pierwsza druzyna: ";
Group Darts(TeamOne);
cout<<Darts.show();
cout<<"Druga druzyna: ";
Group Diablo(TeamTwo);
cout<<Diablo.show();
cout<<"Trzecia druzyna- kopia drugiej- zmiana wzrostu jednego z zawodnikow: ";
p7.change_height(230);
Group Drakensang(TeamThree);
cout<<Drakensang.show();
string filename;
string line;
string arr[5];
int i=0;
cout<<"Podaj nazwe pliku razem z rozszerzeniem: ";
cin>>filename;
ifstream file;
file.open(filename);
if (file.good())
{
cout<<"Taki plik istnieje"<<endl;
while (getline(file, line))
{
arr[i]=line;
i++;
cout<<"test";
}
Player p11(arr[0]);
p11.split(arr[0], ';');
Player p12(arr[1]);
p12.split(arr[1], ';');
Player p13(arr[2]);
p13.split(arr[2], ';');
Player p14(arr[3]);
p14.split(arr[3], ';');
Player p15(arr[4]);
p15.split(arr[4], ';');
p11.change_height(100);
vector<Player*> TeamFour = {&p11, &p12, &p13, &p14, &p15}; //wektor 4 druzyny, z pliku
cout<<"Wyswietlanie wszystkich 4 druzyn: "<<endl;
cout<<"Pierwsza druzyna: ";
cout<<Darts.show();
cout<<"Druga druzyna: ";
cout<<Diablo.show();
cout<<"Trzecia druzyna- kopia drugiej- zmiana wzrostu jednego z zawodnikow: ";
cout<<Drakensang.show();
cout<<"Czwarta druzyna- wczytana z pliku: ";
Group ReadingTeam(TeamFour);
ReadingTeam.show();
Darts.write("Darts");
Diablo.write("Diablo");
Drakensang.write("Drakensang");
}
else
{
cout<<"Nie ma takiego pliku";
}
file.close();
return 0;
}