[C] zapis struktury do pliku binarnego

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;
}
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.

0

no racja, przerabialem to i nie zauwazylem...

ale co z pierwszym komentarzem?

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...

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