lupek123 Temat założony przez niniejszego użytkownika |
Problem z zapisem/odczytem z pliku[C] » 2014-07-08 12:24:00 Witam, mam mały problem z odczytem z pliku danych. Piszę prostą grę w SDLu i chciałem zrobić listę wyników no i wiadomo że potrzebny jest mi jakiś plik który by te dane przechowywał. I tutaj pojawia się mój problem bo wydaję mi się że kod jest dobry a program niestety po wywołaniu mojej funkcji się sypie. struct info { int czas; char * imie; };
void dopisuj_wynik( char * imie, int wynik ) { struct info dane[ 6 ]; int i, j, a; FILE * plik; plik = fopen( "wyniki.txt", "w+" ); dane[ 5 ].czas = wynik; dane[ 5 ].imie = imie; for( a = 0; a < 5; a++ ) { fscanf( plik, "%d %s", dane[ a ].czas, dane[ a ].imie ); } for( a = 0; a < 5; a++ ) { fprintf( plik, "%d %s", dane[ a ].czas, dane[ a ].imie ); } fclose( plik ); }
Chodzi mi o to że funkcja dostaje dane o czasie i nicku wykona się jakiś algorytm sortujący i zapisywane są z powrotem dane do pliku. Nie rozumiem dlaczego program się wysypuje, problem z otwarciem pliku nie ma bo do pliku są wpisywane jakieś dziwne znaki. Sam plik wyglada mniej więcej tak: 10 Mat 4 Dawid 6 Jan 4 Maciej 9 Ktos |
|
pekfos |
» 2014-07-08 12:27:40 Próbujesz wyświetlić int jako string i odwrotnie. |
|
lupek123 Temat założony przez niniejszego użytkownika |
» 2014-07-08 12:45:35 Nie do końca rozumiem, przecież najpierw chce wyświetlić inta a potem stringa więc nie do końca jeszcze rozumiem co tutaj jest źle? |
|
pekfos |
» 2014-07-08 12:55:45 imie w strukturze info to niezainicjalizowane wskaźniki. Nie możesz do nich wczytywać, ani z nich wyświetlać. Nie do końca rozumiem, przecież najpierw chce wyświetlić inta a potem stringa więc nie do końca jeszcze rozumiem co tutaj jest źle? |
fscanf( plik, "%s %d", dane[ a ].czas, dane[ a ].imie );
fprintf( plik, "%s %d", dane[ a ].czas, dane[ a ].imie );
|
Tak było zanim zedytowałeś posta. |
|
lupek123 Temat założony przez niniejszego użytkownika |
» 2014-07-08 13:10:48 Ok , ale teraz jak zmieniłem trochę program, żeby tylko plik miał liczby i pobierany był tylko %d do dane /.czas, to fakt nie sypie się już ale później wypisuje nie wiadomo jakie liczby. struct info { int czas; char imie; };
for( a = 0; a < 5; a++ ) { fscanf( plik, "%d", dane[ a ].czas ); }
for( a = 0; a < 5; a++ ) { fprintf( plik, "%d", dane[ a ].czas ); }
plik: 10 9 8 7 6 Nie rozumiem przecież teraz już powinno być ok?. |
|
pekfos |
» 2014-07-08 13:17:43 Pokaż więcej kodu. |
|
lupek123 Temat założony przez niniejszego użytkownika |
» 2014-07-08 13:23:16 void dopisuj_wynik( char * imie, int wynik ) { struct info dane[ 6 ]; int i, j, temp, a; FILE * plik; plik = fopen( "wyniki.txt", "w+" ); dane[ 5 ].czas = wynik; fseek( plik, 0, 0 ); for( a = 0; a < 5; a++ ) { fscanf( plik, "%d", & dane[ a ].czas ); } for( a = 0; a < 5; a++ ) { fprintf( plik, "%d", dane[ a ].czas ); } fclose( plik ); }
No i ta struktura co przedtem już pokazywałem. |
|
libed |
» 2014-07-08 21:28:33 plik = fopen( "wyniki.txt", "w+" ); fscanf( plik, "%d", & dane[ a ].czas ); Zapisujemy czy czytamy? |
|
« 1 » 2 |