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

Listy fread()

Ostatnio zmodyfikowano 2014-01-04 19:30
Autor Wiadomość
pekfos
» 2014-01-04 18:56:23
Temat dotyczy fread() i zapisu binarnego. W tym kodzie nie ma niczego takiego.
P-101153
marcelpan
Temat założony przez niniejszego użytkownika
» 2014-01-04 19:05:35
Było ,ale zanim ktoś odpisał zmieniłem taktykę. Jak wiesz jak zrobić to fread to spoko. Mogę przerobić fscanf na fread().
Proszę ten sam niepożądany efekt ,przy fread(). Jak będę umiał to zrobić w fscanf to i w fread(), jak w fread() to i w fscanf().
Naprawdę długo nad tym siedzę, wszystko w listach było proste dopóki na pliki nie trafiłem.
C/C++
void addhead_read()
{
    FILE * pf = fopen( "sss.bin", "rb" );
    if( head == NULL )
    {
        head =( struct node * ) malloc( sizeof( struct node ) );
        fread( head, sizeof( node ), 1, pf );
        head->next = NULL;
        head->prev = NULL;
        tail = head;
    }
    else
    {
        node * pom =( struct node * ) malloc( sizeof( struct node ) );
        fread( pom, sizeof( node ), 1, pf );
        pom->next = head;
        pom->prev = NULL;
        head->prev = pom;
        head = pom;
        pom = NULL;
    } fclose( pf );
}
P-101157
pekfos
» 2014-01-04 19:09:27
Nie wczytujesz int, lecz całą strukturę.
P-101159
marcelpan
Temat założony przez niniejszego użytkownika
» 2014-01-04 19:30:55
Robię sobie przerwę ,już wiem jak to zrobić chyba. Podzielę się jutro wynikiem miejsce na post.

Dobra lekkie opóźnienie.

Udało mi się odkryć sposób ,który działa.

Po pierwsze poprawiłem funkcje save();
C/C++
void save()
{
    FILE * pf = fopen( "sss.bin", "wb" );
    if( head == NULL ) printf( "Pustak!" );
    else
    {
        node * pom = head;
        /*while( pom->next != NULL )
                {
                    fprintf( pf, "%d", pom->val );
                    pom = pom->next;
                }fprintf( pf, "%d", pom->val );*/
        while( pom )
        {
            fwrite( & pom->val, sizeof( int ), 1, pf );
            //fprintf( pf, "%d",pom->val );
            pom = pom->next;
        }
    } fclose( pf );
}
Drugim ruchem było wstawienie w funkcje addhead_read(); Tablicy pomocniczej do której wczytywałem binarnie.

C/C++
void addhead_read()
{
    int a[ 10 ];
    FILE * pf = fopen( "sss.bin", "rb" );
    fread( a, sizeof( int ), 4, pf );
    fclose( pf );
    for( int j = 0; j < 10; j++ )
    {
        printf( " %d \n",( int ) a[ j ] );
    } printf( "\n" );
   
    //pf=fopen("sss.bin","rb");
    for( int i = 0; i < 2; i++ )
    {
        if( head == NULL )
        {
            head =( struct node * ) malloc( sizeof( struct node ) );
            head->val = a[ i ];
            //fread(&head, sizeof(head), 1, pf);
            head->next = NULL;
            head->prev = NULL;
            tail = head;
        }
        else
        {
            node * pom =( struct node * ) malloc( sizeof( struct node ) );
            //fread(&pom, sizeof(node), 1, pf);
            pom->val = a[ i ];
            pom->next = head;
            pom->prev = NULL;
            head->prev = pom;
            head = pom;
            pom = NULL;
        }
    } //fclose(pf);
}
 I teraz to działa i rozmiar pliku po zapisie ma 8 bajtów tyle co powinien po zapisie dwóch intów, więc mam pytanie.
Czy zapisując funkcją fprintf plik mniej waży ??
A i drugie pytanie da się to zrobić bezpośrednio wczytując do list a nie korzystając z tablic pomocniczych, bądź zmiennych?
P-101163
1 « 2 »
Poprzednia strona Strona 2 z 2