08/01/14 7:20
dr. palmito
Salve a tutti,
volevo creare un programmino in c che leggendo da un file di testo inserisse in una una struct i campi del file, una riga per ogni struct e poi usando una lista concatenata metterli in ordine alfabetico.
I campi sono stringa stringa numero stringa.
Ho usato fscans perchè non so quanto è lunga ogni riga del file.
Intanto ho provato a fare questo codice che non ordina in ordine alfabetico, ma non funziona.
dove sbaglio?
volevo creare un programmino in c che leggendo da un file di testo inserisse in una una struct i campi del file, una riga per ogni struct e poi usando una lista concatenata metterli in ordine alfabetico.
I campi sono stringa stringa numero stringa.
Ho usato fscans perchè non so quanto è lunga ogni riga del file.
Intanto ho provato a fare questo codice che non ordina in ordine alfabetico, ma non funziona.
dove sbaglio?
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct elenco { char nome[50]; char codice[4]; int anno; char luogo[50]; } elenco_t; typedef struct elem_lista { elenco_t info; struct elem_lista *succ_p; } elem_lista_t; typedef elem_lista_t *lista_p; lista_p crea_lista(); void Stampa_Lista (lista_p lista, elenco_t info); int main() { FILE *file_p; elenco_t info; lista_p lista; lista_p prec, nuovo, corr; lista = crea_lista(); if((file_p = fopen("prodotto.txt", "r")) == NULL) printf("file non apribile\n"); else { prec = NULL; corr = lista; while (!feof(file_p)) { fscanf(file_p, "%s%s%d%s", info.nome, info.codice, &info.anno, info.luogo); nuovo = (elem_lista_t *)malloc(sizeof(elem_lista_t)); nuovo->info = info; if(prec == NULL) { nuovo->succ_p = lista; lista = nuovo; } else { prec->succ_p = nuovo; nuovo->succ_p = corr; } } } Stampa_Lista (lista, info); fclose(file_p); system("pause"); return 0; } /* crea lista vuota */ lista_p crea_lista() { return NULL; } /* stampa lista */ void Stampa_Lista (lista_p lista, elenco_t info) { while (lista != NULL) { printf( "%s %s %d %s\n", info.nome, info.codice, info.anno, info.luogo); lista = lista->succ_p; } }
aaa