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: 6403
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: 6403
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: 6403
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: 6403
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