Hej, w trakcie wykonywania program zawiesza się.
Z zasady działania miał pobrać dane z pliku, zapisać je w pamięci i wyświetlić pogrupowane. Samo wyświetlanie działa i tam problemu raczej nie ma co szukać, bo wcześniejsze zadanie bez odczytu z pliku przekopiowałem i działało więc na 90% chodzi o odczyt z pliku. I tutaj nie jestem pewien czy dobrze rozumiem w jaki sposób jest to odczytywane (moje wątpliwości dodałem w zakomentowaniu)
Ogólnie plik tekstowy wygląda tak
5
Marta Jakas
2000
Los Cos
6000
NieJa
12000
Pieskulawanoga
123456
Plugawy Janek
98765
A kod programu
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int ilu_daroczyncow;
struct sponsor
{
string nazwisko;
double wplata;
};
string znaki;
int nr = 1;
int nr_struktury = 0;
int main()
{
fstream plik;
plik.open("daroczyncy.txt", ios::in);
if (!plik.is_open())
{
cout << "Nie odnaleziono pliku. Zamykam program";
exit(EXIT_FAILURE);
}
getline(plik, znaki); // pobieram pierwsza linie
znaki = ilu_daroczyncow;
sponsor * sponsorzy = new sponsor[ilu_daroczyncow];
while (getline(plik, znaki)) // tutaj rozumiem pobiera od lini 2giej już? Bo nie wiem czy na zlym typie danych sie nie wyklada
{
switch(nr)
{
case 1: sponsorzy[nr_struktury].nazwisko = znaki;
break;
case 2: sponsorzy[nr_struktury].wplata = atoi(znaki.c_str());
break;
}
nr++;
if (nr == 3)
{
nr = 1;
nr_struktury++;
}
}
int bogaci = 0;
cout << "\n\n\nNASI WSPANIALI SPONSORZY!!!\n\n";
for (int i=0; i < ilu_daroczyncow; i++)
{
if (sponsorzy[i].wplata >= 10000)
{
cout << sponsorzy[i].nazwisko << " " << sponsorzy[i].wplata << endl;
bogaci++;
}
}
if (bogaci == 0)
cout << "brak";
cout << endl << endl << endl;
cout << "Nasi sponsorzy\n\n";
int biedni = 0;
for (int i=0; i < ilu_daroczyncow; i++)
{
if (sponsorzy[i].wplata <= 10000)
{
cout << sponsorzy[i].nazwisko << " " << sponsorzy[i].wplata << endl;
biedni++;
}
}
if (biedni == 0)
cout << "brak" << endl;
delete[] sponsorzy;
plik.close();
return 0;
}