Linguaggio C: errore status_access_violation
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??
il file di entrata è fatto nel seguente modo:
nome_prodotto1 25,36
nome_prodotto2 23,4
ecc.
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
La seguente riga:
dovrebbe essere
Devi infatti passare l'indirizzo della variabile a fscanf e non il suo valore.
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.
"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?
Esatto..