[C] zapis struktury do pliku binarnego

Odpowiedz Nowy wątek
2010-05-29 18:08

Rejestracja: 10 lat temu

Ostatnio: 5 lat temu

0

napisalem taki program, mam dwie watpliwosci:
1) da sie jakos przezwyciezyc ten naciagany sposob zapisu struktury do pliku binarnego (wiecej informacji w komentarzu)
2) program niby dziala ok, ale czy przypadkiem nie zapisuje na koncu pliku binarnego jakis "smieci"?

#include <stdio.h>

#include <time.h>
/*
Napisz program, który alokuje pamięć dla jednowymiarowej tablicy struktur zmiennych zespolonych o rozmiarze podanym przez użytkownika, wypełnia ją liczbami losowymi: część rzeczywista z przedziału od 6 do 10 a część urojona od 5 do 12. Wypisz tablicę na ekran, a następnie zapisz ją do pliku tekstowego oraz binarnego.*/

typedef struct zesp
{
    float x;
    float y;
}zesp;

int main()
{
    srand(time(0));

    int n;
    scanf ("%d", &n);
    zesp *tab = (zesp*)malloc(n*sizeof(zesp));

    if (tab ==NULL) printf("fsfsfsdfs");
    int i;
    for (i=0; i<n; ++i)
    {
        tab[i].x=6+rand()%(10-6+1);
        tab[i].y=5+rand()%(12-5+1);
    }

    for (i=0; i<n; ++i)
    {
    printf("%.0f + %.0fi\n", tab[i].x, tab[i].y);
    }

    FILE *wp=fopen("plik.txt", "w");
    if (wp == NULL)
        printf("blad otwarcia");

    i=0;
    for (i; i<n; ++i)
        fprintf(wp, "%.0f + %.0fi\n", tab[i].x, tab[i].y);

    FILE *bin=fopen("plik2.dat", "wb");
    if (bin == NULL)
        printf("blad otwarcia BINARNEGO");

    for (i=0; i<n; ++i)
    {
        fwrite(tab, sizeof(float), 2*n, bin); //tutaj tak kombinowalem, bo jeden egzemplarz struktury ma dwa elementy
    }
    fclose(bin);
    bin=fopen("plik2.dat", "rb");
    float wartosc;
        for (i=0; i<2*n; ++i)
        {
            fread(&wartosc, sizeof(float), 1, bin);
            printf("%f\n", wartosc);
    }

    fclose(bin);
    fclose(wp);
    free(tab);

    return 0;
}

Pozostało 580 znaków

2010-05-29 18:22

Rejestracja: 12 lat temu

Ostatnio: 26 sekund temu

0

a przy zapisie binarnym to po co ci ta pętla for?
Nawet ten zapis binarny zrobiłeś tak jakby pętli nie było, więc w efekcie zamiast zapisać n liczb zapisujesz n^2.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2010-05-29 18:55

Rejestracja: 10 lat temu

Ostatnio: 5 lat temu

0

no racja, przerabialem to i nie zauwazylem...

ale co z pierwszym komentarzem?

Pozostało 580 znaków

2010-05-30 17:49

Rejestracja: 10 lat temu

Ostatnio: 5 lat temu

0

a jednak ta petla jest potrzebna, bo inaczej wypiszemy tylko pierwsza wartosc pliku binarnego...

niby program dziala, ale mam wrazenie, ze te moje pomysly z n i 2*n sa niezbyt eleganckie...

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0