Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Salve a tutti sto cercando di fare esercizi sulle liste e lettura/scrittura su file binari,
la struttura del nodo comprende due campi un intero ed un array di caratteri, ho implementato delle funzioni per creare la lista, stampare il contenuto della lista(a video e su file), nel file scrivo l'intero nodo con la funz fwrite() fatto questo vorrei leggere i dati dal file e creare una nuova lista.
Codice sorgente - presumibilmente C++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// struttura del nodo
typedefstruct elemento {
int value;
char nome[10];
struct elemento *next;
} nodo;
typedef nodo *list;
// var globale di tipo list
list root =NULL;
// prototipi
void stampa();
void stampanewlista();
void leggi();
void scrivi(list);
list cons(int,char[],list);
// main principale
main(){
leggi();
stampa();//stampa dati appena letti
stampanewlista();//dovrebbe creare una nuova lista con tutti i dati
//salvati nel file e stamparli video
system("PAUSE");
}
void scrivi(list x){
FILE*fp;
if((fp =fopen("dati.dat","ab"))==NULL){
printf("Errore durante l'apertura del file...");
}else{
fwrite(&x,sizeof(nodo),1,fp);
printf("\n\tDato salvato con successo\n");
fclose(fp);
}
}
list cons(int e, char s[],list l){
list t;
t =(list)malloc(sizeof(nodo));
t->value = e;
strcpy(t->nome,s);
scrivi(l);//scrivo il nodo sul file
t->next = l;
return t;
}
void leggi(){
int n;
char c[10];
do{
printf("\nIntrodurre numero: \t");
scanf("%d", &n);
printf("\nIntrodurre nome: \t");
scanf("%s", c);
root = cons(n,c,root);
}while(n!=0);
}
void stampa(){
while(root!=NULL){
printf("%d %s\n",root->value,root->nome);
root=root->next;
}
}
list cons2(list e,list my){
e =(list)malloc(sizeof(nodo));
e->next = my;
return e;
}
void stampanewlista(){
list newlista =NULL, x =NULL;
FILE*fp;
if((fp =fopen("dati.dat","rb"))==NULL){
printf("Errore durante l'apertura del file...");
}else{
while(!feof(fp)){
fread(&x,sizeof(nodo),1,fp);
newlista = cons2(x,newlista);
}
}
while(newlista!=NULL){
printf("%d %s\n",newlista->value,newlista->nome);
newlista=newlista->next;
}
}
Il programma viene compilato perfettamente, ma stampa solo 3 record e con caratteri strani
Il prob č sicuramente nella creazione della nuova lista ma nn riesco a risolverlo.
il codice non č dei migliori scusate.
Ultima modifica effettuata da Bonny il 24/08/2010 alle 15:28