Przerobienie pętli dla wczytywania wielu plików

0

Witam, mam taką funkcję jak poniżej i do tej pory program działał tak że miałem wprowadzane pliki i za każdym razem jak był dodawany następny plik to tamten wcześniej był zamykany a potem otwierany na nowo i dopisywany więc było to nie poprawnie. Chodzi mi o to że wprowadzam jakiś plik i z tego pliku wejscie >> dane są zapisywane do tablicy, pętla się kończy i powiedzmy że mam tą tablice na indeksach 0-5(oczywiście danych może być dowolna ilość), a gdy dodaje następny plik i wywołuję znowu tą funkcję to on mi nadpisuje te dane które dodałem wcześniej bo pętla zaczyna się od zera i nie wiem jak zrobić tak żeby funkcja zaczynała dopisywanie do tablicy do tej danej na której skończyła czyli jak wywołuje dla kolejnego pliku to żeby dopisywało do tablicy dla indeksu 678itd a nie leciało od 0. Mam jeszcze drugi problem jest pod poniższą funkcją, tam jest funkcja do powiększania tablicy i nie wiem jak się z niej pozbyć wycieków.
Z góry dziękuję za pomoc.

void Wypisz_osoby(Studenci **osoby, int ile_osob, string plik_wej_z_param) {

	ifstream wejscie(plik_wej_z_param);
	Studenci przedmiot;
	getline(wejscie, przedmiot.nazwa_przedmiotu);
	cout << przedmiot.nazwa_przedmiotu << endl;
	getline(wejscie, przedmiot.prowadzacy);
	cout << przedmiot.prowadzacy << endl;

	for (int i = 0; i < ile_osob; i++)
	{
		osoby[i]->nazwa_przedmiotu = przedmiot.nazwa_przedmiotu;
		osoby[i]->prowadzacy = przedmiot.prowadzacy;
		wejscie >> osoby[i]->imie >> osoby[i]->nazwisko >> osoby[i]->nr_albumu >> osoby[i]->ocena >> osoby[i]->data;
		
		

		cout << osoby[i]->imie << " " << osoby[i]->nazwisko << " " << osoby[i]->nr_albumu << " " << osoby[i]->ocena << " " << osoby[i]->data << "\n";
	}
	
	
	wejscie.close();
}

A tu nie wiem gdzie wsadzić delete żeby program się nie sypał

bool Odczyt_imion(Studenci **&tablica_osoby, string plik_wej_z_param, int &rozmiar_tablicy, int &licznik) {
	ifstream wejscie(plik_wej_z_param);
	string nazwa_przedmiotu_a;
	string prowadzacy_a;
	string imie_a;
	string nazwisko_a;
	string nr_albumu_a;
	string ocena_a;
	string data_a;
	string test;
	if (!wejscie) {
		cout << "Nie udana proba odczytu pliku: " << plik_wej_z_param << endl;
		return EXIT_FAILURE;
	}
	else {
		getline(wejscie, nazwa_przedmiotu_a);
		getline(wejscie, prowadzacy_a);

		while (wejscie >> imie_a >> nazwisko_a >> nr_albumu_a >> ocena_a >> data_a) {
			if (licznik >= rozmiar_tablicy)
			{
				rozmiar_tablicy += 1 / 2 * rozmiar_tablicy; // powiększenie rozmiaru;
				Studenci **tmp = new Studenci*[rozmiar_tablicy];
				for (int i = 0; i < licznik; ++i) tmp[i] = tablica_osoby[i];
				delete[] tablica_osoby;
				tablica_osoby = tmp;
				//delete[] tmp;
			}

			tablica_osoby[licznik] = new Studenci{ nazwa_przedmiotu_a, prowadzacy_a, imie_a, nazwisko_a, nr_albumu_a, ocena_a, data_a };
			licznik++;
		}
		
	}
	return EXIT_SUCCESS;
}
0

nie opisuj co Ty tam zrobiles z jakimis indeksami i tablicami tylko napisz co Ty chcesz osiagnac.
Funkcjonalnie, co chcesz zrobic (bez wdawania sie z szczegoly implementacji)

0

Chcę aby wywołanie tej pierwszej funkcji za każdym razem zaczynało dopisywanie danych do tablicy od miejsca w którym skończyło po poprzednim pliku bo tak jak jest teraz to za każdym razem leci od zera i nadpisuje dane.

1

nadal piszesz szczegoly implementacyjne. Jakies pierwsza funkcja jakas tablica.

Chcesz miec funkcje ktora bedzie dopisywac dane z pliku do jakies kolekcji danych tak?

uzyj std::vector zamiast tablicy. Tam masz size i bedziesz wiedziec gdzie jest koniec. std::vector mozesz przekazywac jako referencje i uzupelniac ja po prostu w funkcji (po za funkcja bedzie juz zaktualizowana)

0

Na zajęciach nie używaliśmy std::vector więc chciałbym to zrobić na tą chwilę bez używania tego, jest jakaś inna metoda?

0

to przekazuj dwa parametry. Tablice oraz jej wieklosc (na zasadzie gdzie skonczyles zapisywanie danych)

wymogi by pracowac na tablicach sa glupie

1 użytkowników online, w tym zalogowanych: 0, gości: 1