Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102

    [C]Problema con liste

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #define n 10
    
    struct elemento creaLista();
    void stampaLista(struct elemento *);
    
    struct elemento
    {
    	int inf;
    	struct elemento *ptr; 
    };
    struct elemento creaLista()
    {
    	struct elemento *p,*punt;
    	int i;
    	if(n==0) //Se gli elementi della lista saranno 0 creiamo una lista vuota
    		p=NULL;
    	else
    	{
    		p=(struct elemento*)malloc(sizeof(struct elemento));
    		puts("Inserisci il primo valore:");
    		scanf("%d",&p->inf);
    		punt=p;
    		for(i=2;i<=n;i++)
    		{
    			punt->ptr=(struct elemento*)malloc(sizeof(struct elemento));
    			punt=punt->ptr;
    			printf("Inserisci il %d elemento:\n",i);
    			scanf("%d",&punt->inf);
    		}
    		punt->ptr=NULL; //fine della lista
    	}
    	return (*p);
    }
    void stampaLista(struct elemento*p)
    {
    	while(p!=NULL)
    	{
    		printf("%d",p->inf);
    		puts("--->");
    		p=p->ptr;
    	}
    }
    int main(void)
    {
    	struct elemento *lista;
    	lista=creaLista();
    	stampaLista(lista);	
    }
    Quando compilo mi da questo errore:
    codice:
    48: error: incompatible types when assigning to type ‘struct elemento *’ from type ‘struct elemento’
    A cosa è dovuto?

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326

    Re: [C]Problema con liste

    Originariamente inviato da Ghemon-a
    A cosa è dovuto?
    Al fatto che la funzione creaLista() restituisce un tipo "struct elemento" ma nel main assegni il valore di ritorno ad un *puntatore* a struct elemento. Modifica la funzione in maniera tale da farle restituire un puntatore e non dovrebbero esserci problemi (elimina l'asterisco di dereferenziazione nell'istruzione return e modifica il tipo del valore di ritorno sia nell'intestazione che nel prototipo). Tra l'altro i prototipi sono inutili in quel caso.
    every day above ground is a good one

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102

    Re: Re: [C]Problema con liste

    Originariamente inviato da YuYevon
    Al fatto che la funzione creaLista() restituisce un tipo "struct elemento" ma nel main assegni il valore di ritorno ad un *puntatore* a struct elemento. Modifica la funzione in maniera tale da farle restituire un puntatore e non dovrebbero esserci problemi (elimina l'asterisco di dereferenziazione nell'istruzione return e modifica il tipo del valore di ritorno sia nell'intestazione che nel prototipo). Tra l'altro i prototipi sono inutili in quel caso.
    Scusami, potresti scrivermi il codice da modificare ? Sono fossilizzato su questa soluzione e non riesco capire in che modo modificarla...

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102

    Re: Re: Re: [C]Problema con liste

    Originariamente inviato da Ghemon-a
    Scusami, potresti scrivermi il codice da modificare ? Sono fossilizzato su questa soluzione e non riesco capire in che modo modificarla...
    Grazie mille, risolto

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Te l'avevo scritto come modificare, comunque:

    codice:
    struct elemento *creaLista();
    codice:
    struct elemento *creaLista()
    {
    	struct elemento *p,*punt;
    	int i;
    	if(n==0)
    		p=NULL;
    	else
    	{
    		p=(struct elemento*)malloc(sizeof(struct elemento));
    		puts("Inserisci il primo valore:");
    		scanf("%d",&p->inf);
    		punt=p;
    		for(i=2;i<=n;i++)
    		{
    			punt->ptr=(struct elemento*)malloc(sizeof(struct elemento));
    			punt=punt->ptr;
    			printf("Inserisci il %d elemento:\n",i);
    			scanf("%d",&punt->inf);
    		}
    		punt->ptr=NULL;
    	}
    	return p;
    }
    EDIT: prego...
    every day above ground is a good one

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    102
    Originariamente inviato da YuYevon
    Te l'avevo scritto come modificare, comunque:

    codice:
    struct elemento *creaLista();
    codice:
    struct elemento *creaLista()
    {
    	struct elemento *p,*punt;
    	int i;
    	if(n==0)
    		p=NULL;
    	else
    	{
    		p=(struct elemento*)malloc(sizeof(struct elemento));
    		puts("Inserisci il primo valore:");
    		scanf("%d",&p->inf);
    		punt=p;
    		for(i=2;i<=n;i++)
    		{
    			punt->ptr=(struct elemento*)malloc(sizeof(struct elemento));
    			punt=punt->ptr;
    			printf("Inserisci il %d elemento:\n",i);
    			scanf("%d",&punt->inf);
    		}
    		punt->ptr=NULL;
    	}
    	return p;
    }
    Si infatti Grazie ancora !!

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.