Oppure

Loading
24/01/15 14:07
Sguaraus
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
#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 24/01/15 14:23
aaa
24/01/15 14:31
nessuno
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 24/01/15 14: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à.
24/01/15 17:19
Sguaraus
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?
aaa
24/01/15 18:21
nessuno
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à.
24/01/15 18:40
Sguaraus
Ti riferisci a TPprodotto prodotto?
Ultima modifica effettuata da Sguaraus 24/01/15 18:47
aaa
24/01/15 20:15
nessuno
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à.
24/01/15 20:23
Sguaraus
Scusa l'ignoranza, ma non dovrebbe allocare la memoria nel momento in cui si dichiara la struttura e la variabile di tipo struttura?
aaa
24/01/15 21:04
nessuno
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à.