Zapis struktury do pliku

0

Witam, mam mały problem z programem. Dopiero uczę się C więc proszę o wyrozumiałość. Napisałem program który tworzy zadaną liczbę struktur,drukuje je i na koniec ma zapisać do pliku. Tu pojawia się problem bo o ile nazwa pendrive z programu jest zapisana bez problemu zamiast jego pojemności i ceny zapisują się jakieś dziwne znaki. Kod:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main ()
{
	struct pen{
		char nazwa[20];
		int poj;
		double cena;
	};
	int n,i;
	printf("Ile pendrive zapisac?");
	scanf("%d",&n);
	struct pen peny[n];
	for(i=0;i<n;i++){
	printf("\nPodaj nazwe %d pendrive:",i+1);
	scanf("%s",&peny[i].nazwa);
	printf("\nPodaj pojemnosc %d pendrive:",i+1);
	scanf("%d",&peny[i].poj); 
	printf("\nPodaj cene %d pendrive:",i+1);
	scanf("%d",&peny[i].cena);
}
int j,m;
printf("Ile pendrive chcesz wypisac?");
scanf("%d",&m);
if(m>n){
printf("Liczba struktur do wypisania jest wieksza niz liczba uwtorzonych struktur. Program przerywa dzialanie.");
return 0;
}
for(j=0;j<m;j++){
 printf("\n\n Dane pendrive %d",j+1);
 printf("\n Nazwa :%s", peny[j].nazwa);
printf("\n Pojemnosc :%d", peny[j].poj);
printf("\n Cena :%d", peny[j].cena);
}
int k,l;
printf("\nIle pendrive chcesz zapisac do pliku?");
scanf("%d",&k);
if(k>n){
printf("Liczba struktur do wypisania jest wieksza niz liczba uwtorzonych struktur. Program przerywa dzialanie.");
return 0;
}
FILE *zapis;
zapis=fopen("Pendrive struktury.txt","w");
for(l=0;l<k;l++){
	 fwrite(&peny[l],sizeof(peny),1,zapis);
	fclose(zapis);
}
	return 0;
}

Z góry dziękuję za podpowiedzi i pomoc! :)

0

Zacznij od poprawienia formatów wczytywanych danych w scanf

printf("\nPodaj pojemnosc %d pendrive:",i+1);
scanf("%i", &peny[i].poj); 
printf("\nPodaj cene %d pendrive:",i+1);
scanf("%lf", &peny[i].cena);
0

Formaty poprawione :)
Cały czas nie zapisuje się jak powinno. Jakieś dalsze wskazówki co do programu żeby ładnie zapisywał? :)

0

Na szybko:

scanf("%d", &n);
struct pen peny[n];

tak nie można. Użyj malloc

    for (l = 0; l < k; l++)
    {
        fwrite(&peny[l], sizeof(peny), 1, zapis);
        fclose(zapis);//<-?
    }

Jak sprawdzasz, czy nie zapisuje jak powinno? Pamiętaj, że tu zapisujesz struktury do pliku, a nie tekst. Więc w notatniku mogą być głupoty :)

PS:
Przy fwrite nie musisz używać żadnych pętli, popatrz na jej argumenty https://pl.wikibooks.org/wiki/C/fwrite
Jeżeli chcesz zobaczyć poprawność zapisu, odczytaj plik funkcją fread.

0

fwrite(&peny[l],sizeof(peny),1,zapis); coś takiego na pewno nie zadziała. Albo inaczej - zadziała. Tylko potem nic dziwnego, że w pliku są krzaczki xp
lepiej użyj fprintf np.

for (l = 0; l < k; l++)
{
	fprintf(zapis, "%s %i %lf\n", peny[l].nazwa, peny[l].poj, peny[l].cena);
}
fclose(zapis);
0

Dzięki wielkie Panowie. Program działa jak powinien :)

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