Linguaggio C: errore status_access_violation

dem1509
ciao a tutti!!!
Ho scritto questo programma che legge un file di ingresso e poi, dopo varie elaborazione scrive un nuovo file di uscita.
Per semplificazione vi mando soltanto la lettura e la scrittura del file senza l'elaborazione intermedia.
Il programma viene compilato correttamente, purtroppo però quando cerco di farlo girare mi dà l' errore status_access_violation. La stessa cosa mi succede con un altro programma ma non so proprio come risolvere il problema.
Potreste darmi una mano per favore??

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXNOME 15
#define MAXPRODOTTI 1000

struct prodotto
{
   float prezzo;
   char nome_prodotto [MAXNOME];
   
};
void aumento (char *fileingresso, char *fileuscita);
int leggi_file (FILE *file_ingresso, struct prodotto prodotti[]);
void scrivi_file (struct prodotto prodotti[], FILE *fpout, int dim);

int main (int argc, char *argv[])
{
   FILE *fpin;
   FILE *fpout;
   float tasso_aumento;
   
   if (argc != 3)
   {
      printf ("Uso: prova  <file_entrata> <file_uscita>");
	  exit (EXIT_FAILURE);
   }
   aumento (argv[1], argv[2]);
   
   return EXIT_SUCCESS;
}


void aumento (char *fileingresso, char *fileuscita)
{
   struct prodotto prodotti [MAXPRODOTTI];
   int nprodotti;
   FILE *fpin;
   FILE *fpout;
   
   if ((fpin = fopen (fileingresso, "r")) == NULL)
   {
      printf ("errore di apertura del file %s\n", fileingresso);
      exit (EXIT_FAILURE);
   }
   
   printf ("file ingresso aperto");

   
   if ((fpout = fopen (fileuscita, "w")) == NULL)
   {
      printf ("errore di apertura del file %s\n", fileuscita);
      exit (EXIT_FAILURE);
   }
   
   printf ("file uscita aperto");
   
   /* leggi il file di ingresso e salva i dati in un vettore */
   nprodotti = leggi_file (fpin, prodotti);

   fclose (fpin);
   fclose (fpout);
   
   return;
}

int leggi_file (FILE *file_ingresso, struct prodotto prodotti[])
{
   int i;
   
   i = 0;
   while (fscanf (file_ingresso, "%s %f", prodotti[i].nome_prodotto, prodotti[i].prezzo) != EOF)
   {
      printf ("riga %d letta", i);
	  i++;
   }
   
   return i;
}

void scrivi_file (struct prodotto prodotti[], FILE *fpout, int dim)
{
   int i;

   for (i = 0; i < dim; i++)
      fprintf (fpout, "%s %f\n", prodotti[i].nome_prodotto, prodotti[i].prezzo);

   return;
}


il file di entrata è fatto nel seguente modo:
nome_prodotto1 25,36
nome_prodotto2 23,4
ecc.

Risposte
apatriarca
La seguente riga:
fscanf (file_ingresso, "%s %f", prodotti[i].nome_prodotto, prodotti[i].prezzo)

dovrebbe essere
fscanf (file_ingresso, "%s %f", prodotti[i].nome_prodotto, &(prodotti[i].prezzo))

Devi infatti passare l'indirizzo della variabile a fscanf e non il suo valore.

dem1509
"apatriarca":
La seguente riga:

Devi infatti passare l'indirizzo della variabile a fscanf e non il suo valore.


Grazie mille! Quindi per usare la fscanf devo sempre passare l'indirizzo e non il valore se ho capito bene.
Scrivendo questo
fscanf (file_ingresso, "%s %f", prodotti[i].nome_prodotto, prodotti[i].prezzo)

ho passato l'indirizzo del primo elemento della stringa nome_prodotto ma il valore del prezzo e non il suo indirizzo giusto?

apatriarca
Esatto..

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.