C, leyendo del archivo en estructura

He estado luchando con esto por días y no puedo entender por qué no funciona.

Intento leer números del archivo con números escritos así:

0 2012 1 1 2000.000000 0 2012 1 1 3000.000000 1 2012 1 1 4500.000000 

mi estructura:

 struct element{ int id; int sign; int year; int month; double amount; struct element *next; }; struct queue{ struct element *head; struct element *tail; struct element *head2; struct element *temp; struct element *temph; int size; }; 

(head2, temp y temph se utilizan en la estructura de clasificación)

y leyendo de un archivo:

 void read_str(struct queue *queue){ FILE *reads; char filename[40]; int temp; printf("Type in name of the file\n"); scanf("%s",&filename); reads=fopen(filename, "r"); if (reads==NULL) { perror("Error"); return 1; } else { while(!feof(reads)) { struct element *n= (struct element*)malloc(sizeof(struct element)); fscanf(reads,"%d %d %d %d %lf", n->id, n->sign, n->year, n->month, n->amount); n->next=NULL; if(queue->head ==NULL) { queue->head=n; } else { queue->tail->next=n; } queue->tail=n; queue->size++; } } } 

Puedo cambiar el aspecto de los datos en un archivo cambiando la función que lo escribe, pero no creo que ese sea el problema. Supongo que estoy usando malloc de una manera incorrecta.

 fscanf(reads,"%d %d %d %d %lf", n->id, n->sign, n->year, n->month, n->amount); 

La familia de funciones scanf espera direcciones. Cambie la línea fscanf a:

 fscanf(reads,"%d %d %d %d %lf", &n->id, &n->sign, &n->year, &n->month, &n->amount); 

Nota al margen, esta es una línea muy engañosa:

 else { while(!feof(reads)) {