napisalem taki program, mam dwie watpliwosci:
- da sie jakos przezwyciezyc ten naciagany sposob zapisu struktury do pliku binarnego (wiecej informacji w komentarzu)
- 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;
}