Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: [C] Lista semplice

  1. #1

    [C]Lista Semplice

    Ciao,
    visti i grossi problemi sulle liste di liste, sto facendo esercizio sulla lista semplice...

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    
    void pulisci( char temp[20])
    {
     int i;
     for(i=0;i<=19;i++)
      {
       temp[i]="";
      }
    }
    
    typedef struct t_automobile  //struttura accessori
     {
       char macchina[20];
       struct t_automobile *next;
     } Auto,*PointAuto;
    
    
       
    int main()
    {
     
     int flag=0;
     char temp[20]={"\0"};
     PointAuto HeadAuto=NULL,CurrPtr=NULL,PrevPtr=NULL; // puntatori a struct automobile
     
     HeadAuto=(PointAuto)malloc(sizeof(PointAuto)); // crea il primo elemento della lista;
     
     CurrPtr=HeadAuto; 
     
     printf("Inserire l'automobile, F per finire:");
     scanf("%s",temp);
     
     while(strcmp(temp,"F")!=0) // ciclo per le auto
      {
       strcpy(CurrPtr->macchina,temp); // copia il nome dell auto nel campo macchina della struttura automobile
       
       PrevPtr=CurrPtr;
       
       CurrPtr=(PointAuto)malloc(sizeof(PointAuto)); //Crezione del nuovo elemento della lista macchine 
       PrevPtr->next=CurrPtr; // creo il link al prossimo elemento della lista 
       fflush(stdin);
       pulisci(temp);
       printf("Inserire l'automobile, F per finire:");
       scanf("%s",temp);
      
      } 
    
    PrevPtr->next=NULL;
    CurrPtr=HeadAuto;
    do
     {
      printf("%s->",CurrPtr->macchina);
      CurrPtr=CurrPtr->next;
     }while(CurrPtr!=NULL);
    
    free(HeadAuto);
    system("pause"); 
    return 0;
    in pratica se metto i dati troppo velocemente da tastiera il programma si blocca?
    Sbaglio forse l assegnazione dei puntatori? O forse la scanf non e adatta per lo scopo?
    Quando poi riesco a immettere i dati e a terminare l inserimento con F a volte durante la stampa si blocca....qualcuno mi dice se ci sono errori logici?
    Grazie!
    Saluti

  2. #2
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    a parte la mancata chiusura della main, funziona tutto perfettamente...

  3. #3

    Bho

    Gaurda LAked con DevC++ a volte si blocca...Tu che cosa hai usato per compilare?
    cambiando la dichiarazione delle struct sono riuscito a fare anche la lista di liste...se ti interessa te la mando via privato....fammi sapere!

    Cmq grazie!

  4. #4

    Re: [C]Lista Semplice

    La funzione :
    void pulisci( char temp[20])
    è inutile, eliminala.
    Inoltre
    temp[i]="";
    è sbagliato, scrivi :
    temp[i]=0;
    oppure
    temp[i]='\0';
    Anche l'inizializzazione di 'temp' (nel main) dovrebbe essere così:
    char temp[20]="";
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  5. #5
    L'errore è che allocavi la memoria per ogni elemento non con la dimensione
    della struttura, ma con la dimensione del suo puntatore.
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct t_automobile  //struttura accessori
    {
    	char   macchina[20];
    	struct t_automobile *next;
    } *PointAuto;
    
    int main()
    {
    	int count=0;
    	char temp[20];
    	PointAuto HeadAuto, CurrPtr;    // puntatori a struct automobile
    
    	HeadAuto = (PointAuto)malloc(sizeof(struct t_automobile)); // crea il primo elemento della lista;
    
    	CurrPtr = HeadAuto;
    
    	printf("Inserire l'automobile, F per finire.\n\nNome > ");
    	scanf("%s", temp);
    
    	while( strcmp( temp, "F") != 0 )  // ciclo per le auto
    	{
    		strcpy( CurrPtr->macchina, temp);
    		CurrPtr->next = (PointAuto)malloc(sizeof(struct t_automobile)); //Crezione del nuovo elemento della lista macchine
    		CurrPtr = CurrPtr->next;
    		fflush(stdin);
    		printf("Nome > ");
    		scanf("%s", temp);
    	}
    	CurrPtr->next = NULL;
    
    	CurrPtr = HeadAuto;
    
    	printf("Contenuto della lista:\n");
    	while(CurrPtr->next!=NULL)
    	{
    		printf("%2d) %s->\n", count++, CurrPtr->macchina);
    		CurrPtr = CurrPtr->next;
    	}
    
    	free(HeadAuto);
    	system("pause");
    	return 0;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  6. #6
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    lista di liste che roba è? ogni elemento della lista punta a un'altra lista? Oppure è la lista con due puntatori e circolare?
    Postalo che son curioso di capire cos'è...


    L'errore è che allocavi la memoria per ogni elemento non con la dimensione
    della struttura, ma con la dimensione del suo puntatore.
    Urca, non l'avevo notato perchè tutto funzionava... strano...

  7. #7
    Originariamente inviato da Lak3d
    lista di liste che roba è? ogni elemento della lista punta a un'altra lista? Oppure è la lista con due puntatori e circolare?
    Postalo che son curioso di capire cos'è...

    ogni elemento della lista punta a un'altra lista ESATTO!

    Domani da lavoro posto il codice!




    Urca, non l'avevo notato perchè tutto funzionava... strano...

    Saluti e grazie a tutti e due!

  8. #8
    Originariamente inviato da Samuele_70
    L'errore è che allocavi la memoria per ogni elemento non con la dimensione
    della struttura, ma con la dimensione del suo puntatore.
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct t_automobile  //struttura accessori
    {
    	char   macchina[20];
    	struct t_automobile *next;
    } *PointAuto;
    
    int main()
    {
    	int count=0;
    	char temp[20];
    	PointAuto HeadAuto, CurrPtr;    // puntatori a struct automobile
    
    	HeadAuto = (PointAuto)malloc(sizeof(struct t_automobile)); // crea il primo elemento della lista;
    
    	CurrPtr = HeadAuto;
    
    	printf("Inserire l'automobile, F per finire.\n\nNome > ");
    	scanf("%s", temp);
    
    	while( strcmp( temp, "F") != 0 )  // ciclo per le auto
    	{
    		strcpy( CurrPtr->macchina, temp);
    		CurrPtr->next = (PointAuto)malloc(sizeof(struct t_automobile)); //Crezione del nuovo elemento della lista macchine
    		CurrPtr = CurrPtr->next;
    		fflush(stdin);
    		printf("Nome > ");
    		scanf("%s", temp);
    	}
    	CurrPtr->next = NULL;
    
    	CurrPtr = HeadAuto;
    
    	printf("Contenuto della lista:\n");
    	while(CurrPtr->next!=NULL)
    	{
    		printf("%2d) %s->\n", count++, CurrPtr->macchina);
    		CurrPtr = CurrPtr->next;
    	}
    
    	free(HeadAuto);
    	system("pause");
    	return 0;
    }
    grazie millissime! non si finisce mai di imparare

  9. #9
    Utente di HTML.it L'avatar di lloyd27
    Registrato dal
    Mar 2006
    Messaggi
    256
    a parte il solito discorso che le stringhe sarebbe corretto leggerle con un ciclo for al posto di usare %s..

  10. #10
    Originariamente inviato da lloyd27
    a parte il solito discorso che le stringhe sarebbe corretto leggerle con un ciclo for al posto di usare %s..
    quoto! Ma ero proprio di fretta

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 © 2025 vBulletin Solutions, Inc. All rights reserved.