PDA

Visualizza la versione completa : [C] Problema con liste e puntatori


Carlo1984
27-11-2005, 09:59
Salve vi espongo subito il mio problema in pratica devo gestire una coda mediante l'utilizzo di una lista linkata semplice in linguaggio c .Realizzo 2 funzioni per accodare e disaccodare un elemento e passo alle funzioni i puntatori alla testa e alla coda della struttura il problema che all'uscita dalla funzione i puntatori passati come argomento vengono risettati a NULL qualcuno mi potrebbe aiutare ? vi posto il codice



#include <.....>

typedef struct TipoNodo
{
int Valore;
struct TipoNodo *Next;
} TIPONODO;

void Inserisci ( TIPONODO* , TIPONODO* ,int )

int main()
{
TIPONODO *Head ,
*Tail ;

Head = NULL;
Tail = NULL;

printf("%d %d",Head,Tail);

Inserisci(Head , Tail , 12);


printf("\n\n%d %d",Head,Tail);
system("pause");
}

void Inserisci ( TIPONODO* Head , TIPONODO* Tail ,int Value)
{
TIPONODO *Tmp;

Tmp = (TIPONODO*) malloc (sizeof(TIPONODO));
Tmp->Valore = Value;
Tmp->Next = NULL;

if ( Tail == NULL )
{
Tail = Tmp;
Head = Tmp;
}
else
{
Tail->Next = Tmp;
Tail =Tmp;
}
}


All'uscita della funzione inserisci vengono perse le assegnazioni alle variabili Head e Tail passate come argomento alla funzione :bh: chi potrebbe aiutarmi THANKSSSSSS !!!!!

oregon
27-11-2005, 10:17
Per poter modificare un dato all'interno di una funzione, tu devi passarne il puntatore. Per poter modificare un puntatore passato, tu devi passare il puntatore al puntatore. Le modifiche da farsi sono



void Inserisci ( TIPONODO** , TIPONODO** ,int );

Inserisci(&Head , &Tail , 12);

e


void Inserisci ( TIPONODO** Head , TIPONODO** Tail ,int Value)
{
TIPONODO *Tmp;

Tmp = (TIPONODO*) malloc (sizeof(TIPONODO));
Tmp->Valore = Value;
Tmp->Next = NULL;

if ( *Tail == NULL )
{
*Tail = Tmp;
*Head = Tmp;
}
else
{
(*Tail)->Next = Tmp;
*Tail =Tmp;
}
}

Carlo1984
27-11-2005, 19:06
Grazie per l'aiuto funziona tutto mi chiedevo se potevi aiutarmi anche con i file in poche parole quando faccio la fopen nn trova il file e il puntatore al descritto del file rimane sempre impostato a NULL potresti aiutarmi !? ecco il codice


int main()
(
FILE *FDesc;

FDesc = fopen("numeri.txt","r");

if ( FDesc == NULL)
printf("File non trovato");
else
ecc ecc
)

il file nella stessa cartella dell'eseguibile uso dev c++ e ottengo sempre un valore NULL come mai ??

oregon
27-11-2005, 19:10
Non trova il file ... sei sicuro che stia nella cartella in cui il programma si aspetta il file?

Prova a specificare il path completo ...

Carlo1984
27-11-2005, 19:12
ho provato addirittura a spostarlo in c: e a dargli il nuovo percorso ma niente nn funziona . . . .ecco il codice completo

FILE *FDescA ,
*FDescB ;

FDescA = fopen ("c:\a.txt","r");
FDescB = fopen ("c:\b.txt","r");

if ( FDescA == NULL )
printf ("Errore durante l' apertura dei files di input . . .\n\n");
else
{
MainMenu ( &Head , &Tail , FDescA , FDescB );

fclose (FDescA);
fclose (FDescB);
}

nn funziona

oregon
27-11-2005, 19:22
In C il simbolo \ in una costante ha un significato particolare. Per indicare tale carattere lo devi raddoppiare ... fai attenzione ...

FDescA = fopen ("c:\\a.txt","r");

e dato che e' in lettura, naturalmente, deve esistere ...

Carlo1984
27-11-2005, 19:23
niente nn va

oregon
27-11-2005, 19:24
In che senso "non va"?

Carlo1984
27-11-2005, 19:25
che mi entra sempre nel ciclo del NULL non trova il file

oregon
27-11-2005, 19:27
Scusa ... ma il file esiste?

Loading