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

Problem z zapisem zmiennych

Ostatnio zmodyfikowano 2010-02-05 20:17
Autor Wiadomość
Dragonit
Temat założony przez niniejszego użytkownika
Problem z zapisem zmiennych
» 2010-01-30 14:56:05
Jak niektorzy wiedza pisze gre o samochodach ale nie zbyt dziala mi tam zapis zmiennych do pliku. Mam pytanie, jaki sposob jest najlepszy do zapisu np.

C/C++
int zwykla_zmienna; // 1 zmienna
int zmienna_tablicowa[ 100 ]; // 100 zmiennych
char lancuch1[ 100 ]; // lancuch do 99 znakow +0
char lancuch2[ 100 ][ 25 ]; // 100 lancuchów do 99 znakow +0

Uzywalem cos takiego dla zapisu:

C/C++
#include <fstream.h>

char fileName[ 16 ];
ofstream fout( fileName );

fout.write(( char * ) & zwykla_zmienna, sizeof zwykla_zmienna );
fout.write(( char * ) & zmienna_tablicowa, sizeof zmienna_tablicowa );
fout.write(( char * ) & lancuch1, sizeof lancuch1 );
fout.write(( char * ) & lancuch2, sizeof lancuch2 );

fout.close();

A cos takiego dla odczytu:

C/C++
#include <fstream.h>

char fileName[ 16 ];
ifstream fin( fileName );

fin.read(( char * ) & zwykla_zmienna, sizeof zwykla_zmienna );
fin.read(( char * ) & zmienna_tablicowa, sizeof zmienna_tablicowa );
fin.read(( char * ) & lancuch1, sizeof lancuch1 );
fin.read(( char * ) & lancuch2, sizeof lancuch2 );

fin.close();

No i cos nie gra. No i pytanie czy to sie zle zapisuje czy odczytuje?
A najdziwniejsze jest to ze raz ten sposob dziela bez zarzutu a raz nie.
O co tu chodzi? Moze chodzi o zly zapis zmiennych tablicowych, moze trzeba tak:

C/C++
for( int j = 0; j < 100; j++ ) {
    fout.write(( char * ) & zwykla_zmienna[ j ], sizeof zwykla_zmienna );
}

lub

C/C++
for( int j = 0; j < 100; j++ ) {
    fout.write(( char * ) & zwykla_zmienna[ j ], sizeof zwykla_zmienna[ j ] );
}

Tak samo dla odczytu.

/by admin: eh... gdzie Ci moderatorzy poprawiający formatowanie postów...
P-13410
malan
» 2010-01-30 16:33:36
sizeof ? Hmm, czy tam nie powinno być strlen ?
fout.write(( char * ) & lancuch1, strlen( lancuch1 ) );
P-13411
Elaine
» 2010-01-30 16:55:34
Nie, on chce zapisać tablicę as-is, so sizeof ist gut, aber strlen ist schlecht.
P-13412
Dragonit
Temat założony przez niniejszego użytkownika
» 2010-02-03 10:25:01
Powie mi chociaz ktos jak zapisywac tablice do pliku?
P-13522
DejaVu
» 2010-02-03 16:36:49
C/C++
int tablica[ 123 ];
plik.write(( char * ) tablica, sizeof tablica );
P-13525
Dragonit
Temat założony przez niniejszego użytkownika
» 2010-02-04 14:07:36
Czyli tak jest tez dobrze?
C/C++
fout.write(( char * ) & zmienna_tablicowa, sizeof zmienna_tablicowa );
P-13556
Elaine
» 2010-02-04 14:20:40
Nie. Załóżmy, że zmienna_tablicowa to tablica 100 intów. W takiej sytuacji &zmienna_tablicowa jest typu int (*)[100] - wskaźnik na tablicę, co niekoniecznie jest tym, o co nam chodzi. Trzeba skorzystać z tego, że tablica jest niejawnie konwertowalna do wskaźnika (a niech mi któryś teraz wyskoczy, że tablica jest wskaźnikiem /aka nazwa tablicy jest wskaźnikiem na jej pierwszy element/ - zabiję... Nie jest, o czym już pisałem) - czyli wystarczy samo zmienna_tablicowa (zauważ brak ampresandu).
P-13557
Dragonit
Temat założony przez niniejszego użytkownika
» 2010-02-05 20:17:16
dzieki za info. moze dlatego ten zapis mi nie wychodzil.
P-13574
« 1 »
  Strona 1 z 1