Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [C]Loop della lista

  1. #1

    [C]Loop della lista

    Ragazzi come mai questo programma mi và in loop?
    codice:
    #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.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    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 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.