minomic ha scritto:
No quello che ti ho postato è solo un esempio. La funzione stampa la puoi fare come vuoi, basta che stampi! Idem per il resto. Più che altro voleva essere un modello di come affrontare il problema. Anche perché ora ti basta veramente poco per risolvere: l'inserimento ordinato nella lista è già fatto, basta cambiare il tipo di dato che inserisci nel Record (non più un int ma la rappresentazione di un numero complesso) e scrivere tutto su un nuovo file. Poi dovresti aver terminato.
Ok capito, quel while che inserisci nel main
while((buffer = fgets(buffer, 100, fp)) != NULL) {
numero_letto = atoi(buffer);
record.reale = numero_letto;
L1 = aggiungi_in_ordine(L1, record);
fclose(fp);
cosa significa e cosa fa? Perché non ho mai usato ne la fgets ne la funzione atoi.
E' necessaria perché il codice funzioni?
edit: Ho provato a lasciarlo ma il codice non va; non mi da errori in compilazione ma una memory corruption quando chiedo di ordinare una lista. Ti posto il mio tentativo:
Lista_l aggiungi_in_ordine(Lista_l L1, Record n_elemento) {
/* Creazione del nuovo nodo*/
fp = fopen("lista.txt", "r");
Nodo_l* n_nodo = malloc(sizeof(Nodo_l));
n_nodo->rec = n_elemento;
n_nodo->next = NULL;
if(L1 == NULL)
return n_nodo;
/* Inserimento in testa*/
if(minore_di(n_elemento, L1->rec)) {
n_nodo->next = L1;
return n_nodo;
}
/* Copia del puntatore alla testa della lista*/
Lista_l tmp = L1;
while(tmp) {
if(tmp->next == NULL || minore_di(n_elemento, tmp->next->rec)) {
/* Inserisco il nuovo nodo*/
n_nodo->next = tmp->next;
tmp->next = n_nodo;
return L1;
}
tmp = tmp->next;
}
fn = fopen("secondo.txt", "w+");
while(L1) {
fprintf(fn, "%s %g %g\n", L1->rec.id, L1->rec.reale, L1->rec.immaginario);
L1 = L1->next;
}
fclose(fn);
fclose(fp);
remove("lista.txt");
rename("secondo.txt", "lista.txt");
/* Tanto per metterci qualcosa: qui non ci arriva mai*/
return NULL;
}