PDA

View Full Version : [c] Problemi con i puntatori delle liste


Prince_81
02-09-2008, 15:57
Dopo aver creato una lista in questo modo
struct nodo {char nome[30];
struct nodo *prossimo;};

typedef struct nodo PERSONA;
typedef PERSONA *link;

link testa=NULL;
link nuovo=NULL;



Vorrei passare testa e nuovo ad una function ma non ci riesco.
Ho provato in questo modo
void inserire_testa(link testa,link nuovo);

ma non funziona sapreste guidarmi?

DanieleC88
02-09-2008, 20:48
E di cosa si lamenta precisamente il compilatore?

Prince_81
02-09-2008, 22:42
visual c++ 2008 dice che nella function che vado ad utilizzare
void inserire_testa(link testa,link nuovo){
c'è il seguente errore error C2059: errore di sintassi: 'tipo'

sottovento
03-09-2008, 09:15
visual c++ 2008 dice che nella function che vado ad utilizzare
void inserire_testa(link testa,link nuovo){
c'è il seguente errore error C2059: errore di sintassi: 'tipo'

Pubblica un pezzo di codice in piu'.
Comunque, e' chiaro che devi fare una modifica alla tua funzione: a seguito dell'inserimento in testa, andrai a modifcare il parametro "testa".
Nel prototipo che hai postato, questa modifica non e' permessa (meglio: e' permessa ma non verra' presa in considerazione una volta completata la funzione).
Devi quindi modificare la inserire_testa() in modo che la modifica del puntatore a testa possa essere fattibile.

Prince_81
03-09-2008, 12:29
Questo è il codice completo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

struct nodo {char nome[30];
struct nodo *prossimo;};

typedef struct nodo PERSONA;
typedef PERSONA *link;

link testa=NULL;
link nuovo=NULL;

void inserire_testa(link testa,link nuovo);

void main ()
{

int menu;
testa=NULL;
do{
puts("1)Per inserire dato in testa alla lista");
scanf("%d",&menu);

//questo switch è incompleto

switch (menu){
case 1:inserire_testa(testa,nuovo);break;
}while(1);

}



void inserire_testa(link testa,link nuovo){

nuovo=(link)malloc(sizeof(PERSONA));
nuovo->prossimo=testa;
testa=nuovo;
strcpy(nuovo->nome,"Giacomo");
}

sottovento
03-09-2008, 14:12
C'e' un errore di sintassi, ti manca la chiusura di una graffa per lo switch.

Ah! Poi il main deve ritornare un int, non farlo void

Prince_81
03-09-2008, 17:49
Grazie sottovento a volte è vero che sono gli errori più stupidi a farti perdere tempo.