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..