[c] programma che non stampa

frab1
ciao,
sto scrivendo un programma che legge da un file esterno (dati.txt) dei dati e li mette in una struttura..ho un piccolo problema: Ho scritto un ciclo for per stampare a video la struttura(per verificare) ma non stampa nulla!! :shock: :cry:
e il terminale non mi da' alcun warning o altro...
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct{
	char data[10];
	int badge;
	char ora_in[5];
	char ora_out[5];
}INGRESSO;
	
INGRESSO *carica_dati(FILE *fin,int *n);

int main(int argc,char **argv)
{
	int n,i;		//n=dimensione 
	if(argc <2)
		printf("Specificare il file da cui leggere le informazioni!\n");
		exit(-1);
	
	FILE *fin;
	fin=fopen(argv[1],"r");
	if(fin==NULL)
		printf("Errore nell'apertura del file!\n");
		exit(-1);
	INGRESSO *r=carica_dati(fin,&n);		//alla funzione che carica i dati passo: il file letto fin, e la cella a cui mettere la dim.
	
	for(i=0;i<n;i++){
		printf("%s %d %s %s \n",r[i].data,r[i].badge,r[i].ora_in,r[i].ora_out);
	}
}

INGRESSO *carica_dati(FILE *fin,int *n)
{
	
	INGRESSO *r=(INGRESSO *)malloc(sizeof(INGRESSO));	//memoria per ogni riga
	char buf[512];
	while (fgets(buf,sizeof(buf),fin)!=NULL) {
		r=realloc(r,(*n+1)*sizeof(INGRESSO));
		if(r==NULL)	
		{
			printf("Errore di memoria\n");
			exit(-1);
		}
		sscanf(buf,"%s %d %s %s ",r[*n].data,&r[*n].badge,r[*n].ora_in,r[*n].ora_out);
	(*n)++;	
	}
	return r;

}

Risposte
frab1
Non riesco proprio a vedere il problema..mi sembra tutto corretto..qualcuno ha qualche consiglio?

apatriarca
Ho guardato solo velocemente (ho poco tempo), ma utilizzi n prima di inizializzarlo (a zero immagino).

frab1
l'ho inizializzato
int n=0;


ma il problema persiste... :-(

apatriarca
if(argc <2)
      printf("Specificare il file da cui leggere le informazioni!\n");
      exit(-1);

Non hai messo le parentesi per cui l'exit viene eseguito qualsiasi cosa succeda. Il mio compilatore produce diversi warning a riguardo... In ogni caso avresti dovuto dire che non arrivava neanche all'inserimento dei dati. Non avevo infatti guardato quella parte del codice pensando che il problema fosse nello riscrivere a video quello che veniva letto.

P.S. Lo stesso errore è presente anche negli altri if di controllo degli errori.

frab1
che errore stupido, è vero ho dimenticato le graffe...di solito le metto anche quando c'è una sola riga nell'if...grazie apatriarca!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.