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 - Pagina 2

Pagine: [ 1 2 3 4 ] Precedente | Prossimo
Avatar
AldoBaldo (Member)
Guru


Messaggi: 700
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 22:14
Sabato, 24/01/2015
Mi sa che sei in alto mare... :(


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6404
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:17
Sabato, 24/01/2015
Nel programma hai usato la typedef per poter utilizzare un nuovo tipo di dati e questo nuovo tipo di dati l'hai chiamato TPprodotto

Poi hai indicato con

TPprodotto *prodotto;

che vuoi utilizzare una variabile puntatore di tipo TProdotto.

A questo punto ti manca solo l'allocazione dello spazio a cui punta il tuo puntatore, ovvero

prodotto = (TProdotto *)malloc(sizeof(TProdotto));

e solo dopo potrai utilizzare il puntatore.

Cosa c'è di diverso in questo rispetto alle nozioni che hai imparato?


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:42
Sabato, 24/01/2015
Un po' di roba. A me hanno detto di usare la funzione malloc solo quando voglio allocare memoria nello heap, per usare lo stack non è necessario, basta dichiarare le strutture e puntatori a struttura. Tanto è vero che al corso abbiamo visto dati strutturati, puntatori,altri argomenti e solo dopo, le strutture dati dinamiche. Tuttavia qualche programma l'ho fatto e non ho avuto problemi con puntatori e strutture.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6404
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 23:08
Sabato, 24/01/2015
Se vuoi usare variabili locali allora dovevi scrivere nella funzione lettura

TPprodotto prodotto;

e usarlo ad esempio, così

fread(&prodotto.codice, sizeof(int), 1,fp);


P.S. Con & ... mi era sfuggito ...

Ultima modifica effettuata da nessuno il 25/01/2015 alle 0:17


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 23:17
Sabato, 24/01/2015
senza & mi da:

con scorta e codice (tipo int) [Warning] passing argument 1 of 'fread' makes pointer from integer without a cast [enabled by default]

con costo (tipo float) [Error] incompatible type for argument 1 of 'fread'

Ultima modifica effettuata da Sguaraus il 25/01/2015 alle 0:18
PM Quote
Avatar
Sguaraus (Normal User)
Newbie


Messaggi: 18
Iscritto: 24/01/2015

Segnala al moderatore
Postato alle 0:22
Domenica, 25/01/2015
con & smette di funzionarmi il programma dopo qualche secondo che ha ciclato.
Però sono andato avanti con le funzioni che dovevo fare. Probabilmente c'è un errore da qualche altra parte...

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


Messaggi: 6404
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 0:25
Domenica, 25/01/2015
Ogni volta che hai problemi devi postare il codice che utilizzi, altrimenti di che parliamo?


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
AldoBaldo (Member)
Guru


Messaggi: 700
Iscritto: 08/01/2015

Segnala al moderatore
Postato alle 10:37
Domenica, 25/01/2015
Tra le altre cose...

==========

fread(prodotto->codice, sizeof(int), 1,fp);

Così facendo, da come la vedo, pare che tu non stia fornendo un puntatore al campo "codice" della tua struttura, bensì stia fornendo il *valore numerico* di quel campo, il che significa che fread() va a scrivere chissà dove i dati letti.

Lo stesso qui:
fread(prodotto->scorta, sizeof(int), 1,fp);

==========

fread(prodotto->costo, sizeof(float), 1,fp);

Anche qui pare che tu non stia fornendo un puntatore al campo "costo" della tua struttura, bensì stia fornendo il *valore numerico* di quel campo. In più, il compilatore si lamenta perché riceve quello che dovrebbe essere un puntatore, ma lo riceve in un formato per lui "strano" nel contesto, ovvero un tipo float.

==========

fread(prodotto->nome, sizeof(char), 1, fp);

In quest'altro caso, invece, a me pare che tu stia leggendo solo il primo carattere della stringa che intendi leggere.

Lo stesso qui:
fread(prodotto->categoria, sizeof(char), 1, fp);
fread(prodotto->provenienza, sizeof(char), 1, fp);

==========


P.S. Se ho scritto delle stupidaggini qualcuno mi corregga, per favore.


ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
PM Quote
Pagine: [ 1 2 3 4 ] Precedente | Prossimo