PDA

Visualizza la versione completa : [C]Loop della lista


Metalmino
09-02-2013, 00:25
Ragazzi come mai questo programma mi và in loop?


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
typedef struct dati* banca;
struct dati {
char* nome;
float valore;
float percentuale;
int quantita;
banca next;
};
banca lsist_insert_order(banca head,banca n);
int main(int argc, char *argv[])
{
banca il;

il=NULL;
FILE* fp;
char* name; float val; float perc; int quant;
name=malloc(sizeof(char)*256);
fp=fopen("borsa.txt","r");
if(fp==NULL)
printf("errore nell'apertura del file");
while(!feof(fp)){
banca nodo; nodo=malloc(sizeof(struct dati)); nodo->next=NULL;
fscanf(fp,"\n%256[^;];%f[^;];%f[^;];%d\n",name,&val,&perc,&quant);
nodo->nome=malloc(sizeof(char)*256);
strcpy(nodo->nome,name);
nodo->valore=val;
nodo->percentuale=perc;
nodo->quantita=quant;
il=lsist_insert_order(il,nodo);
}


system("PAUSE");
return 0;
}



banca lsist_insert_order(banca head,banca n){
/*Se la lista è vuota deve mettere il nodo n in testa*/
if(head==NULL)
return n; /*ritorna n come testa della lista*/
banca t=head; /*t puntatore di appoggio per scorrere la lista*/
/*Controlla se deve inserire il nodo n in testa alla lista*/
if (n->percentuale < t->percentuale) {
n->next=t; /*sposta il puntatore del nodo successivo di n alla vecchia testa*/
return n; /*ritorna n come testa della lista*/
}
/*Scorre la lista */
while(t->next!=NULL) { /*si ferma all'ultimo nodo*/
if (n->percentuale < t->next->percentuale) { /*confronta i campi item fra n e il nodo successivo a t*/
n->next=t->next; /*inserisce il nodo n */
t->next=n; /* dopo il nodo t */
return head; /*ritorna la testa*/
}
t=t->next; /*sposta t al nodo successivo per scorrere la lista*/
}
t->next=n; /*aggiunge n alla fine della lista*/
return head; /*ritorna la testa*/
}


Grazie in anticipo davvero.

oregon
09-02-2013, 00:44
E' la fscanf sbagliata ...

fscanf(fp,"%256[^;];%f;%f;%d\n", name, &val, &perc, &quant);



P.S. Indenta meglio il codice, distanzia le righe e raggruppale meglio perché così è veramente poco leggibile ...

Loading