Cześć wszystkim,
Przechodząc do sedna sprawy, mój problem leży w 62 linii. Nie mogę zrozumieć czemu wyskakuje mi ostrzeżenie jakobym porównywał wskaźnik z liczbą całkowitą. Dodatkowo mógłby ktoś sprawdzić, czy dobrze operuję na pamięci w fwrite oraz fread.
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
struct produkt{
char nazwa[22];
float cena;
char firma[22];
}*pr;
struct produkt wczytaj(int n, FILE *p);
void wyswietl(struct produkt *pr, FILE *p);
void oblicz(struct produkt *pr, int prowizja, int n);
int main(){
setlocale(LC_ALL, "polish");
int n;
float prowizja;
printf("Ile produktów chcesz wyznaczyæ?");
scanf("%d", &n);
printf("Podaj prowizje w %%: ");
scanf("%f", &prowizja);
pr = (struct produkt*)malloc(n*sizeof(struct produkt));
FILE *p;
if((p = fopen(" ", "wb"))==NULL){
puts("Nie mozna otworzyc pliku. ");
return 1;
}
*pr = wczytaj(n, p);
fclose(p);
if((p = fopen(" ", "rb"))==NULL){
puts("Nie mozna otworzyc pliku. ");
return 1;
}
wyswietl(pr, p);
fclose(p);
oblicz(pr, prowizja, n);
return 0;
}
struct produkt wczytaj(int n, FILE *p){
int i;
for(int i=0; i<n; i++){
fflush(stdin);
printf("Nazwa produktu: "); gets((pr+i)->nazwa);
fflush(stdin);
printf("cena: "); scanf("%f", &(pr+i)->cena);
fflush(stdin);
printf("firma: "); gets((pr+i)->firma);
fwrite((pr+i), sizeof(*pr),1 , p);
}
return *pr;
};
void wyswietl(struct produkt *pr, FILE *p){
int i=0;
printf("\nDane produktu: ");
while(fread(pr+i, sizeof(*pr), 1, p)!= NULL){
printf("\nNazwa produktu: "); puts((pr+i)->nazwa);
printf("Cena: %.2f", (pr+i)->cena);
printf("\nfirma: "); puts((pr+i)->firma);
i++;
}
}
void oblicz(struct produkt *pr, int prowizja, int n){
float p=0;
int i;
for(i=0; i<n; i++){
p = (pr+i)->cena*(1-((float)prowizja/100));
p =(pr+i)->cena-p;
printf("\nDla produktu \"%s\" prowizja wynosi : %.2f z³", (pr+i)->nazwa, p);
}
}