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

Problem z zapisem/odczytem z pliku[C]

Ostatnio zmodyfikowano 2014-07-09 10:00
Autor Wiadomość
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.
C/C++
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 );
    }
    // Jakis algorytm sortujacy  //
    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
P-113506
pekfos
» 2014-07-08 12:27:40
Próbujesz wyświetlić int jako string i odwrotnie.
P-113508
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?
P-113512
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?
C/C++
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.
P-113513
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.
C/C++
struct info
{
    int czas;
    char imie;
};


for( a = 0; a < 5; a++ )
{
    fscanf( plik, "%d", dane[ a ].czas );
}
// Jakis algorytm sortujacy i //
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?.
P-113516
pekfos
» 2014-07-08 13:17:43
Pokaż więcej kodu.
P-113517
lupek123
Temat założony przez niniejszego użytkownika
» 2014-07-08 13:23:16
C/C++
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 );
    }
    // Jakis algorytm sortujacy i //
    for( a = 0; a < 5; a++ )
    {
        fprintf( plik, "%d", dane[ a ].czas );
    }
   
    fclose( plik );
}

No i ta struktura co przedtem już pokazywałem.
P-113518
libed
» 2014-07-08 21:28:33
plik = fopen( "wyniki.txt", "w+" );
fscanf( plik, "%d", & dane[ a ].czas );

Zapisujemy czy czytamy?
P-113536
« 1 » 2
  Strona 1 z 2 Następna strona