PDA

Visualizza la versione completa : [C] liste


dodora
15-11-2012, 18:58
Dovrei scrivere un programma in c che legge da un file dei dati e li memorizza in una lista.
il file contiene un elenco con nome cognome ed età di alcuni studenti.

Se non erro dovrei creare una struttura record con i campi nome cognome ed età...ma la cosa che non riesco proprio a fare è prelevare i dati dal file e memorizzarli nella lista come record.

è giusto definire la lista con il campo info di tipo record, dove record è definito con i campi nome cognome ed età?

Who am I
15-11-2012, 20:34
Ogni nodo della lista contiene l' informazione, ed un puntatore al nodo successivo.
La lista si riferisce indirettamente a un nodo, attraverso il quale può andare a reperire tutti gli altri nodi, più informazioni aggiuntive come la lunghezza.

dodora
16-11-2012, 17:23
Ho scritto una cosa del genere..ovviamente non funziona ma mi dite come correggere



#include <stdio.h>
#include <stdlib.h>

#include <malloc.h>
typedef char stringa[20];
typedef struct
{ char nome[20];
char cognome[20];
int eta;
int altezza;
} record;

typedef struct EL
{record info;
struct EL *prox;
}elemlista;
typedef elemlista *listaelementi;



void visualizza(listaelementi );
listaelementi inserisci(listaelementi, record);

int main(int argc, char *argv[])
{
listaelementi lista;
lista=NULL;
FILE *fl;
record elemento;

/*memorizza elenco dal file alla lista*/
if ((fl=fopen("elenco.txt", "r")) == NULL)
printf("impossibile aprire il file");
else
{
while(!feof(fl))
{ fscanf(fl, "%s %s %d %d", elemento.nome, elemento.cognome, &elemento.eta, &elemento.altezza);

/*solo per controllare che i dati vengano presi in modo corretto*/
printf("%s %s %d %d ", elemento.nome, elemento.cognome, elemento.eta, elemento.altezza);


inserisci(lista, elemento);

}
}


visualizza(lista);


system("PAUSE");
return 0;
}

listaelementi inserisci(listaelementi lista, record elemento)
{ elemlista *punt;
punt = malloc(sizeof(elemlista));
punt->info= elemento;
punt->prox = lista;
return punt;
}

void visualizza(listaelementi lista)
{
if (lista!=NULL)
{
printf("%s", lista->info);
visualizza(lista->prox);

}
else printf("lista vuota");
}

MItaly
16-11-2012, 17:24
Il codice va inserito tra tag
... , altrimenti perde l'indentazione; qui ho sistemato io, in futuro ricordatene.

:ciauz:

Who am I
16-11-2012, 17:40
E tra l' altro devi di preciso cos'è che non funziona.

dodora
17-11-2012, 12:53
in realtà non funziona niente, l'unica cosa che riesco a fare è prelevare i dati dal file ed inserirli in una struttura record..
il vero problema è trasferire il contenuto del record nel file...come si fa??

dodora
17-11-2012, 15:51
Scusate ho sbagliato a scrivere..volevo dire che non riesco a trasferire il record in una lista..non so se é corretto definire la lista con il campo di tipo record oppure inserire diversi campi x nome, cognome, età., altezza..
Sono giorni che giro su internet, libri, ecc ma non riesco a trovare una soluzione

oregon
17-11-2012, 18:09
In realtà non riesci neanche a spiegare cosa non sai fare ... e questo è perfettamente possibile per chi inizia, ma non aiuta a darti una mano.

dodora
17-11-2012, 19:14
forse non riesco a spiegarmi..

in pratica ho un file con un elenco di nome, cognome, eta e altezza del tipo:
rossi mario 34 170
lupo alberto 34 160
magno carlo 45 174

devo leggere da questo file M record distinti contenente nome, cognome, età e altezza e memorizzare questi M record in una lista.

Non so fare proprio questo...inserire questi dati di tipo record nella lista, non so come definire questa lista..potreste indicarmi che struttura dare a questa lista??

Per iniziare, in pratica la lista va definita così


typedef struct elemlista {char nome[20]; char cognome[20]; int eta; int altezza; struct EL *prox; }elemlista;

oppure


typedef struct elemlista {record info; struct EL *prox; }elemlista;

Almeno per farmi iniziare potreste darmi una dritta, i casi li ho provati entrambi ma non funzionano nel momento dell'inserimento dei dati...ditemi almeno che forma sarebbe opportuna..

dodora
17-11-2012, 19:16
ah dimenticavo nel secondo codice record è definito come


typedef struct
{ char nome;
char cognome[20];
int eta; int altezza;
}
record;

Loading