Visualizzazione dei risultati da 1 a 4 su 4

Discussione: [C]Problema con lista

  1. #1

    [C]Problema con lista

    Ho questo codice:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <malloc.h>
    typedef struct dispensa* disp;
    struct dispensa{
    	char* codice;
    	char* descrizione;
    	int quantita;
    	disp next;
    };
    
    void stampalista(disp il);
    disp search_node(disp il,char* cod);
    disp insert_head(disp il,disp tmp);
    
    int main(int argc, char *argv[]) {
    	char* cod; char* desc; int quant; cod=malloc(sizeof(char)*256);
    	FILE* fp;
    	fp=fopen("dispensa.txt","r");
    	disp il=NULL;
    	disp tmp;
        tmp=NULL;
    	while(!feof(fp))
    	{
    	desc=malloc(sizeof(char)*256);
    	fscanf(fp,"%256[^;];%256[^;];%d\n", cod,desc,&quant);	
        il=search_node(il,cod);
    	if(il!=NULL)
    	il->quantita+=quant;
    	else{
        tmp=malloc(sizeof(struct dispensa));
    	tmp->codice=malloc(sizeof(char)*256);
        strcpy(tmp->codice,cod); 
        tmp->descrizione=malloc(sizeof(char)*256);
    	strcpy(tmp->descrizione,desc);
    	tmp->quantita=quant;
    	tmp->next=NULL;
    	il=insert_head(il,tmp);
    	}}
    	
    	stampalista(il);
    	
    	system("PAUSE");
    	return 0;
    }
    
    disp search_node(disp il,char* cod)
    {
        //if((il==NULL) || (strcmp(il->codice,cod) == 0)) return il; 
      //else return search_node(il->next, cod); 
         while(strcmp(il->codice,cod)!=0 && il!=NULL)
         {                             
           il=il->next;
           }
      return il;   
    }
    
    
    void stampalista(disp il)
    {
         while(il->next!=NULL)
         {
          printf("%s\t%s\t%d\n",il->codice,il->descrizione,il->quantita);
          il=il->next;
         }
    }
    
    disp insert_head(disp il,disp tmp)
    {
    	if(il!=NULL)    
         tmp->next=il;  
      return tmp; 
    }
    Mi crasha con la funzione di ricerca del nodo, come mai? Devo preparare un esame per giovedì xD

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,246
    Ovvio che hai un crash ... all'inizio, appena entri nella search_node il puntatore

    disp il

    è NULL.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    E ma essendo NULL non dovrebbe ritornare il e basta al primo giro? Non riesco a capire.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,246
    Veramente esegue questa linea

    while(strcmp(il->codice,cod)!=0 && il!=NULL)

    che crea il crash
    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 © 2019 vBulletin Solutions, Inc. All rights reserved.