Czytanie z pliku i pewne obliczenia

Czytanie z pliku i pewne obliczenia
L9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 43
0

Mam taki program opierający się na strukturze:

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

KOD:

Kopiuj
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?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

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

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
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.

L9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 43
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:

Kopiuj
#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);
}
MJ
  • Rejestracja: dni
  • Ostatnio: dni
0

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

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
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);

L9
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 43
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.