lamamasters Temat założony przez niniejszego użytkownika |
[C++] Odczyt i zapis danych na plikach tekstowych » 2015-01-06 01:52:34 Witam, Chciałbym zapytać dlaczego nie mogę wywołać funkcji odczytBazy(); + wypiszBaze(); bez wywoływania uprzednio funkcji zapisBazy();? Ps. jeśli na początku wywołamy zapisBazy(); wszystko działa poprawnie. Oto mój kod - można wkleić do kompilatora: #include <iostream> #include <fstream> #include <iomanip> #include <string>
using namespace std;
class klasa { public: std::string imie; std::string nazwisko; };
int rozmiarBazy = 2; klasa tablica[ 2 ]; klasa tablica2[ 2 ];
void zapisBazy() { FILE * fd = NULL; if(( fd = fopen( "baza.txt", "wt" ) ) != NULL ) { for( int i = 0; i < rozmiarBazy; i++ ) { fwrite( & tablica[ i ], sizeof( tablica[ i ] ), 1, fd ); } fclose( fd ); } else { cout << "Bład zapisu bazy!"; } }
void odczytBazy() { FILE * fd = NULL; if(( fd = fopen( "baza.txt", "rt" ) ) != NULL ) { for( int i = 0; i < rozmiarBazy; i++ ) { fread( & tablica2[ i ], sizeof( tablica[ i ] ), 1, fd ); } fclose( fd ); } else { cout << "Bład odczytu bazy!"; } }
void wypiszBaze() { for( int i = 0; i < rozmiarBazy; i++ ) { cout << tablica2[ i ].imie << endl; } }
main() { tablica[ 0 ].imie = "Kamil"; tablica[ 1 ].imie = "Ada"; zapisBazy(); odczytBazy(); wypiszBaze(); cin.ignore(); getchar(); }
|
|
stryku |
» 2015-01-06 03:22:41 Sprecyzuj co nie działa. Jak chcesz żeby działał kod, a jak działa? Bo powiedzenie "czemu nie mogę wywołać funkcji" nie mówi dużo |
|
darko202 |
» 2015-01-06 11:35:49 zastanowiło mnie sizeof( tablica[ i ] gdy klasa tablica[ 2 ];
class klasa { public: std::string imie; std::string nazwisko; };
czyli takie pytanie jak sizeof(string ) = ??
Strings are objects that represent sequences of characters.
//o ile w void zapisBazy() fwrite( & tablica[ i ], sizeof( tablica[ i ] ), 1, fd ); //może ma jakiś sens
//to w void odczytBazy() fread( & tablica2[ i ], sizeof( tablica[ i ] ), 1, fd ); // działanie jest chyba nieprzewidywalne
|
|
1aam2am1 |
» 2015-01-06 11:43:35 Tak niemożna zapisywać std::string ani żadnej rzeczy która dynamicznie alokuje pamięć.
Jak wykorzystujesz zapis/odczyt w stylu c korzystaj z c-string |
|
lamamasters Temat założony przez niniejszego użytkownika |
» 2015-01-06 22:41:13 Dziękuję za zainteresowanie moim problemem, jednak bardzo proszę o podanie jakiegoś konkretnego rozwiązania.
Np. w jaki sposób mogę skorzystać z c-string na moim przykładzie? Nadal zagadką pozostaje też fakt, że przy wywołaniu funkcji zapisBazy(); wszystko zdaje się być ok.
Pozdrawiam! |
|
lamamasters Temat założony przez niniejszego użytkownika |
» 2015-01-06 22:46:30 Chyba, że ktoś posiada link do przykładu, w jaki sposób można zapisać tablicę o typie struktury/klasy w pliku tekstowym :) |
|
darko202 |
» 2015-01-07 08:12:54 |
|
1aam2am1 |
» 2015-01-07 08:14:21 Stworzyć odpowiednią funkcje fwrite( tablica[ i ].imie.c_str(), tablica[ i ].imie.size(), 1, fd );
|
|
« 1 » 2 |