Czytanie z pliku i pewne obliczenia

0

Mam taki program opierający się na strukturze:

struct magazyn
{
	char nazwa[30];
	int cena, ilosc;
}magazyn; 

KOD:

void zestawienie(void)
{
	FILE *fp=fopen("magazyn.txt", "r");
	int wartosc=1,suma=0;
	printf("Nazwa towaru\tIlosc\tCena\tWartosc\n");
	while (fread(&magazyn,1,sizeof(magazyn),fp))
	{
		wartosc=(magazyn.ilosc * magazyn.cena);
		printf("%s\t%d\t%d\t%d", magazyn.nazwa,magazyn.cena, magazyn.ilosc, wartosc);
		suma = suma + wartosc;
	}
	printf("\n\n");
	printf("Suma wartosci towarow: %d\n", suma);
	fclose(fp);
} 

Funkcja nie chce wyświetlić wartości zmiennych "wartosc" i "suma"
Ktoś wie dlaczego?

0

A co się dzieje jak próbujesz je wyświetlić? o_O

0

ja zakładam, że ma plik tekstowy, a on robi wczytywanie binarne i robi mu się taka kicha, bo nie ma zera na końcu łańcucha.
Jak wygląda ten plik, czy to jest wynik zapisu przez twój kod (pokaż ten kod), czy coś innego.

0

Znaczy, wszystko się wyświetla, oprócz zmiennych wartosc i suma
Na dodatek funkcja zawsze wyświetla dodatkową linie z trzema zerami

Tutaj macie kod programu:

#include<stdio.h>
#include<stdlib.h>

 struct magazyn
{
	char nazwa[30];
	int cena, ilosc;
}magazyn;

void dodaj(char *nazwa, int ilosc, int cena);
void zestawienie(void);

main()
{
	dodaj(magazyn.nazwa,magazyn.ilosc,magazyn.cena);
	zestawienie();
	system("pause");
}

void dodaj(char *nazwa, int ilosc, int cena)
{
	int i,a;
	FILE *fp=fopen("magazyn.txt", "a");
	printf("Podaj ilosc towarow do dodania: \n");
	scanf("%d", &a);
	for(i=0;i<a;i++)
	{
		printf("\nPodaj nazwe towaru: ");
		scanf("%29s", magazyn.nazwa);
		printf("\nPodaj jego ilosc: ");
		scanf("%d", &magazyn.ilosc);
		printf("\nPodaj jego cene: ");
		scanf("%d", &magazyn.cena);
		fprintf(fp,"%s\t\t%d\t%d\n",magazyn.nazwa,magazyn.ilosc,magazyn.cena);
	}
	fclose(fp);
}

void zestawienie(void)
{
	FILE *fp=fopen("magazyn.txt", "r");
	int wartosc=0,suma=0;
	printf("Nazwa towaru\tIlosc\tCena\tWartosc\n");
	while (fread(&magazyn,1,sizeof(magazyn),fp))
	{
		wartosc=magazyn.ilosc+magazyn.cena;
		printf("%s\t%d\t%d\t%d", magazyn.nazwa,magazyn.cena, magazyn.ilosc, wartosc);
		suma = suma + wartosc;
	}
	printf("\n\n");
	printf("Suma wartosci towarow: %d\n", suma);
	fclose(fp);
}
0

fread to funkcja kiedy czytasz binarnie plik. Wcześniej jednak musisz zapisać binarnie.

1

Czyli jest dokładnie tak jak napisałem, zapisujesz dane tekstowe, a czytasz je jako dane binarne.
zmień to fread na fscanf(fp, "%s%d%d", agazyn.nazwa, &magazyn.cena, &magazyn.ilosc);

0

Dzięki za pomoc, wszystko działa jak powinno

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