Sguaraus (Normal User)
Newbie
Messaggi: 18
Iscritto: 24/01/2015
|
Buongiorno,
ho un problema con la fread. Ho un file binario contenente vari prodotti di supermercato, devo:
- leggere quei prodotti
- inserirli in una lista dinamica e stamparli a video
- aggiungere altri prodotti e ristampare la lista
- rimuovere dei prodotti e ristampare la lista
- salvare la lista aggiornata su un file
il problema è che son fermo al punto 1. Il compilatore mi da errore nelle fread, ma non in tutte, solo quelle che vanno a leggere dei campi della struttura del prodotto di tipo float e int. Quelli di tipo char no.
Programma C
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #include <string.h> #include <stddef.h> #include <stdlib.h> #define MAXS1 30 #define MAXS2 50 #define MAXS3 10 typedef struct { int codice; char nome[MAXS2]; char categoria[MAXS1]; char provenienza[MAXS1]; int scorta; float costo; } TPprodotto; typedef struct TPprodtemp{ char nome[MAXS2]; char categoria[MAXS1]; char provenienza[MAXS1]; int codice; int scorta; float costo; struct TPprodtemp *next; } TPprodmag; FILE *fp; TPprodotto *prodotto; TPprodmag *magazzino; void lettura(FILE *fp); int main(int argc, char *argv[]){ lettura(fp); fclose(fp); } void lettura(FILE *fp){ if((fp=fopen("magazzino.dat", "rb+"))==NULL){ printf(" Impossibile aprire il file"); exit; } //finchè non ho terminato il file continuo a leggere i prodotti fread(prodotto->codice, sizeof(int), 1,fp); fread(prodotto->nome, sizeof(char), 1,fp); fread(prodotto->categoria, sizeof(char), 1,fp); fread(prodotto->provenienza, sizeof(char), 1,fp); fread(prodotto->scorta, sizeof(int), 1,fp); fread(prodotto->costo, sizeof(float), 1,fp); printf("%d", prodotto->codice); printf("%s", prodotto->nome); printf("%s", prodotto->categoria); printf("%s", prodotto->provenienza); printf("%d", prodotto->scorta); printf("%f", prodotto->costo); }
|
Ultima modifica effettuata da Sguaraus il 24/01/2015 alle 15:23 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6380
Iscritto: 03/01/2010
|
Errore del compilatore? Ovvero quando compili? Quindi puoi anche dire qual è il messaggio d'errore e in quale linea esattamente avviene...
In ogni caso, devi indicare il puntatore all'area destinazione, che nel caso di un valore float o int, deve essere indicata con &
Ultima modifica effettuata da nessuno il 24/01/2015 alle 15:32
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Sguaraus (Normal User)
Newbie
Messaggi: 18
Iscritto: 24/01/2015
|
Grazie mille, un errore stava proprio lì nel &. Adesso non mi da più errori nella compilazione tuttavia quando mando in esecuzione mi salta fuori:
il programma ha smesso di funzionare
Windows: si è verificato un problema che impedisce il funzionamento corretto del programma bla bla bla...
hai idea del motivo?
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6380
Iscritto: 03/01/2010
|
Certo ...
Succede perché utilizzi il puntatore alla struttura senza allocare lo spazio per la struttura stessa.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Sguaraus (Normal User)
Newbie
Messaggi: 18
Iscritto: 24/01/2015
|
Ti riferisci a TPprodotto prodotto?
Ultima modifica effettuata da Sguaraus il 24/01/2015 alle 19:47 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6380
Iscritto: 03/01/2010
|
Sì
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Sguaraus (Normal User)
Newbie
Messaggi: 18
Iscritto: 24/01/2015
|
Scusa l'ignoranza, ma non dovrebbe allocare la memoria nel momento in cui si dichiara la struttura e la variabile di tipo struttura?
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6380
Iscritto: 03/01/2010
|
E dov'è la variabile di tipo struttura di cui parli?
Io vedo solo un puntatore al tipo struttura (ovvero prodotto)
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
Sguaraus (Normal User)
Newbie
Messaggi: 18
Iscritto: 24/01/2015
|
Stai facendo vacillare tutto ciò che ho capito di C
Quindi come dovrei fare ad allocare la memoria per la struttura?
|
|