Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Funzione fread con dati strutturati int/char/float
Forum - C/C++ - Funzione fread con dati strutturati int/char/float

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
Sguaraus (Normal User)
Newbie


Messaggi: 18
Iscritto: 24/01/2015

Segnala al moderatore
Postato alle 15:07
Sabato, 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++

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stddef.h>
  4. #include <stdlib.h>
  5.  
  6. #define MAXS1 30
  7. #define MAXS2 50
  8. #define MAXS3 10
  9.  
  10. typedef struct {
  11.                 int codice;
  12.                 char nome[MAXS2];
  13.                 char categoria[MAXS1];
  14.                 char provenienza[MAXS1];
  15.                 int scorta;
  16.                 float costo;
  17.         } TPprodotto;
  18.        
  19. typedef struct TPprodtemp{
  20.                 char nome[MAXS2];
  21.                 char categoria[MAXS1];
  22.                 char provenienza[MAXS1];
  23.                 int codice;
  24.                 int scorta;
  25.                 float costo;
  26.                 struct TPprodtemp *next;
  27.         } TPprodmag;
  28.  
  29. FILE *fp;
  30. TPprodotto *prodotto;
  31. TPprodmag *magazzino;
  32.  
  33. void lettura(FILE *fp);
  34.  
  35. int main(int argc, char *argv[]){
  36.        
  37.         lettura(fp);
  38.         fclose(fp);
  39. }
  40.  
  41. void lettura(FILE *fp){
  42.        
  43.         if((fp=fopen("magazzino.dat", "rb+"))==NULL){
  44.                 printf(" Impossibile aprire il file");
  45.                 exit;
  46.         }
  47.         //finchè non ho terminato il file continuo a leggere i prodotti
  48.         fread(prodotto->codice, sizeof(int), 1,fp);
  49.         fread(prodotto->nome, sizeof(char), 1,fp);
  50.         fread(prodotto->categoria, sizeof(char), 1,fp);
  51.         fread(prodotto->provenienza, sizeof(char), 1,fp);
  52.         fread(prodotto->scorta, sizeof(int), 1,fp);
  53.         fread(prodotto->costo, sizeof(float), 1,fp);
  54.        
  55.         printf("%d", prodotto->codice);
  56.         printf("%s", prodotto->nome);
  57.         printf("%s", prodotto->categoria);
  58.         printf("%s", prodotto->provenienza);
  59.         printf("%d", prodotto->scorta);
  60.         printf("%f", prodotto->costo);
  61. }


Ultima modifica effettuata da Sguaraus il 24/01/2015 alle 15:23
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 15:31
Sabato, 24/01/2015
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à.
PM Quote
Avatar
Sguaraus (Normal User)
Newbie


Messaggi: 18
Iscritto: 24/01/2015

Segnala al moderatore
Postato alle 18:19
Sabato, 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?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 19:21
Sabato, 24/01/2015
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à.
PM Quote
Avatar
Sguaraus (Normal User)
Newbie


Messaggi: 18
Iscritto: 24/01/2015

Segnala al moderatore
Postato alle 19:40
Sabato, 24/01/2015
Ti riferisci a TPprodotto prodotto?

Ultima modifica effettuata da Sguaraus il 24/01/2015 alle 19:47
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:15
Sabato, 24/01/2015


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à.
PM Quote
Avatar
Sguaraus (Normal User)
Newbie


Messaggi: 18
Iscritto: 24/01/2015

Segnala al moderatore
Postato alle 21:23
Sabato, 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?

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6380
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:04
Sabato, 24/01/2015
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à.
PM Quote
Avatar
Sguaraus (Normal User)
Newbie


Messaggi: 18
Iscritto: 24/01/2015

Segnala al moderatore
Postato alle 22:08
Sabato, 24/01/2015
Stai facendo vacillare tutto ciò che ho capito di C :yup:
Quindi come dovrei fare ad allocare la memoria per la struttura?

PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo