Salve
Premessa che la distinzione del passaggio by value e by reference l'ho capita, ma sto avendo un problema con il passaggio di una struct by reference. Devo leggere da file dei prodotti di un supermercato e decidere se sono scaduti o meno, limite di scadenza anno 2010.
Es: tonno,48,2007
Io ho provato a fare cosi ma il programma mi gira a vuoto
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NMAX 10
struct prodotto
{
char tipo[20];
int quantita;
int scadenza;
};
void prodotti_scaduti(char fileprodotti[], struct prodotto p_s[], int *nps, int a_l);
struct prodotto estrai_dati(char s[]);
int main(int argc, char *argv[])
{
struct prodotto p_s[NMAX];
int nps = 0; //numero dei prodotti scaduti
int anno_limite = 2010;
if(argc != 2)
{
printf("Inserisci: <fileprodotti>");
exit(EXIT_FAILURE);
}
prodotti_scaduti(argv[1], p_s, &nps, anno_limite);
printf("I prodotti scaduti e da buttare sono:\n");
while(nps >= 0)
{
printf("%d di %s\n", p_s[nps].quantita, p_s[nps].tipo);
}
return EXIT_SUCCESS;
}
void prodotti_scaduti(char fileprodotti[], struct prodotto p_s[], int *nps, int a_l)
{
FILE *fp;
struct prodotto p;
char s[128];
if((fp = fopen(fileprodotti, "r")) == NULL)
{
printf("Errore apertura del file!!");
exit(EXIT_FAILURE);
}
while(fgets(s, 128, fp) != NULL)
{
p = estrai_dati(s);
if(p.scadenza < a_l)
{
p_s[*nps] = p;
(*nps)++;
}
}
return;
}
struct prodotto estrai_dati(char s[])
{
struct prodotto p;
int i, j;
char t[10];
i=0;
j=0;
while(s[i] != ',' && s[i] != '\0')
{
p.tipo[j++] = s[j++];
}
p.tipo[j] = '\0';
j=0;
i++;
while(s[i] != ',' && s[i] != '\0')
{
t[j++] = s[i++];
}
t[j] = '\0';
p.quantita = atoi(t);
j=0;
i++;
while(s[i] != ',' && s[i] != '\0')
{
t[j++] = s[i++];
}
t[j] = '\0';
p.scadenza = atoi(t);
return p;
}