[C++] Wczytywanie danych z pliku
Ostatnio zmodyfikowano 2020-04-13 12:48
Biedrzyk Temat założony przez niniejszego użytkownika |
[C++] Wczytywanie danych z pliku » 2020-04-11 13:01:03 Witam, utworzyłem w moim programie funkcję, która ma wczytywać przy każdym uruchomieniu programu zawartość książki adresowej z pliku( dane zapisane przy poprzednich uruchomieniach programu). W pliku zapis wygląda następująco: 1|Jan|Kowalski|123456789|jan@kowalski.pl|ul. Stara, 11-111 Wrocław|. Po odpaleniu ma wczytać wszystkie osoby do wektora żeby przy dodaniu kolejne numeracja nie zaczynała się od 1 tylko była o jeden większa niż poprzedni wpis. Niestety po uruchomieniu programu zawartość wektora jest równa 0 więc nie działa, czy ktoś mógłby mi pomóc i wyjaśnić dlaczego? Zmienna iloscAdresatow to oczywiście wielkość wektora. Podaję kod poniżej: void wczytajAdresatow( vector < Adresat > & adresaci ) { Adresat adresat; char znak = '|'; int iloscAdresatow = 0; int iloscZnakow = 0; string wycinekLinii; fstream plik; ifstream( "KsiazkaAdresowa.txt" ); if( plik.good() == true ) { while( getline( plik, wycinekLinii, znak ) ) { switch( iloscZnakow ) { case 0: adresat.id = atoi( wycinekLinii.c_str() ); break; case 1: adresat.imie = wycinekLinii; break; case 2: adresat.nazwisko = wycinekLinii; break; case 3: adresat.nr_tel = wycinekLinii; break; case 4: adresat.email = wycinekLinii; break; case 5: adresat.adres = wycinekLinii; break; } if( wycinekLinii == " " ) { iloscZnakow = 0; adresaci.push_back( adresat ); } else { iloscZnakow++; } } plik.close(); } }
Adresat to struktura: struct Adresat { int id = 0; string imie = "", nazwisko = "", nr_tel = "", email = "", adres = ""; };
|
|
RazzorFlame |
» 2020-04-11 23:08:17 fstream plik; ifstream( "KsiazkaAdresowa.txt" );
|
Nie tak otwiera się pliki. Sprawdź w kursie jak to ma wyglądać poprawnie. Problemem jest to, że ta druga linia w żaden sposób nie ma wpływu na obiekt plik. Tworzy ona inny, nienazwany obiekt, który od razu jest niszczony. No i oprócz tego, weź pod uwagę, że typ fstream to inny typ niż ifstream. I zamiast atoi użyj std::stoi. |
|
Biedrzyk Temat założony przez niniejszego użytkownika |
» 2020-04-13 12:48:15 Zmieniłem tak jak pisałeś ale nadal wektor jest pusty, nie odczytuje mi kompletnie nic :/ Plik jest tworzony przez inna funkcję w katalogu roboczym programu, mam wpisanych 10 pozycji. Po ponownym uruchomieniu programu nie wczytuje mi zapisanych ju.ż danych i numeruje kolejne wpisy od początku :/ A dlaczego nie mogę użyć atoi? przy użyciu stoi i dodaniu biblioteki string dostaję taki komunikat: error: 'stoi' was not declared in this scope|
int wczytajAdresatow( vector < Adresat > & adresaci ) { Adresat adresat; char znak = '|'; int iloscAdresatow = 0; int iloscZnakow = 0; string wycinekLinii = ""; ifstream plik; plik.open( "KsiazkaAdresowa.txt" ); while( getline( plik, wycinekLinii, znak ) ) { switch( iloscZnakow ) { case 0: adresat.id = atoi( wycinekLinii.c_str() ); break; case 1: adresat.imie = wycinekLinii; break; case 2: adresat.nazwisko = wycinekLinii; break; case 3: adresat.nr_tel = wycinekLinii; break; case 4: adresat.email = wycinekLinii; break; case 5: adresat.adres = wycinekLinii; break; } if( wycinekLinii == " " ) { adresaci.push_back( adresat ); iloscZnakow = 0; } else { iloscZnakow++; } } plik.close(); return iloscAdresatow; }
|
|
« 1 » |