program
Benny: W pliku BazaOsób.txt zawarte są dane w sposób następujący:
imię
nazwisko
płeć
wiek
stan cywilny
Napisz program, który zapisze do pliku Emeryci.txt dane tylko tych osób z pliku BazaOsób.txt,
które mają co najmniej 67 lat. Dane w pliku Emeryci.txt mają być zapisane w ten sam sposób jak
w pliku BazaOsób.txt.
Na razie mam pomysł, aby w pliku BazaOsób.txt ustawić pozycję na 4 linię, sprawdzić wiek i
przeskakiwać cały czas o 5 pozycji.
Czy to jest ok?
Jak mam zapamiętać te 5 linii, aby je wpisać do pliku?
8 sty 13:49
Benny: #include<iostream>
#include<string.h>
#include<fstream>
using namespace std;
main()
{
ifstream f1;
ofstream f2;
f1.open("BazaOsób.txt");
f2.open("Emeryci.txt");
char imie[30],nazwisko[30],plec[10],stancywilny[10];
int wiek;
while(!f1.eof())
{
f1>>imie>>nazwisko>>plec>>wiek>>stancywilny;
if(wiek>=67)
f2<<imie<<endl<<nazwisko<<endl<<plec<<endl<<wiek<<endl<<stancywilny<<endl;
}
f1.close();
f2.close();
system("pause");
}
jest ok?
8 sty 14:14
Dziadek Mróz:
Panie kochanieńki, C++ to język obiektowy, więc darujmy sobie tablice.
class Osoba
{
private:
std::string Imie;
...
public:
Osoba() {}
Osoba(std::string imie, ...);
~Osoba() {}
friend std::ifstream &operator >>(std::ifstream &ifs, Osoba &o)
{
ifs >> o.Imie >> ...
return ifs;
}
friend std::ofstream &operator <<(std::ofstream &ofs, const Osoba &o)
{
ofs << o.Imie << std::endl << ...
return ofs;
}
friend std::ostream &operator <<(...
};
int main()
{
std::vector<Osoba *> osoby;
std::ifstream plik_we("bazaOsob.txt");
if (plik_we)
{
size_t ile = 0;
Osoba *temp = new Osoba();
while (plik_we >> (*temp))
{
osoby.push_back(temp);
std::cout << osoby[ile];
++ile;
}
}
else
{
perror("bazaOsob.txt");
}
return 0;
}
Mogłem walnąć byka przy używaniu *temp ale nie mam pod ręką kompilatora
8 sty 18:12
Dziadek Mróz:
Później używasz pętli po iteratorze std::vector<Osoba>::iterator i sprawdzasz wiek, jak pasi to
używając naszej definicji std::ofstream wysłać dziada do pliku
8 sty 18:14
Dziadek Mróz:
for (std::vector<Osoba *>::iterator it = osoby.begin(); it != osoby.end(); ++it)
{
if ((*it).Wiek >= 67)
{
plik_wy << (*it);
}
}
8 sty 18:21
Benny: Trochę ciężko mi się to czyta
8 sty 18:36
8 sty 18:51
Benny: Dzięki, ale to chyba dopiero po jutrzejszym kolokwium, bo dziś raczej nie ogarnę.
8 sty 19:06
Dziadek Mróz:
jak zrobisz zestawy z C w C++ to mozesz sie brac za obiektowe C++
8 sty 19:08
Benny: ok
8 sty 19:19