Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Odczyt i zapis danych na plikach tekstowych

Ostatnio zmodyfikowano 2015-01-12 16:30
Autor Wiadomość
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:

C/C++
#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(&tablica[i], sizeof(tablica[i]), 1, fd);
            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 << tablica[i].imie << endl;
        cout << tablica2[ i ].imie << endl;
    }
}

main() {
   
    tablica[ 0 ].imie = "Kamil";
    tablica[ 1 ].imie = "Ada";
   
    // Aby zobaczyć problem należy dodać funkcję zapisBazy(); w komentarz
    zapisBazy();
    odczytBazy();
    wypiszBaze();
   
   
    cin.ignore();
    getchar();
}
P-124282
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
P-124284
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

 




P-124294
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
P-124296
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!
P-124358
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 :)
P-124360
darko202
» 2015-01-07 08:12:54
przeczytaj
http://cpp0x.pl/kursy/Kurs-C++​/Poziom-4​/Podstawy-obslugi-plikow/355

strukturę musisz sobie odczytać z wczytanej linii

 
P-124373
1aam2am1
» 2015-01-07 08:14:21
Stworzyć odpowiednią funkcje
C/C++
fwrite( tablica[ i ].imie.c_str(), tablica[ i ].imie.size(), 1, fd );
P-124374
« 1 » 2
  Strona 1 z 2 Następna strona