ioshi
16-01-2009, 14:30
Salve a tutti del forum.
Ragazzi sto facendo un programma per l'università sulle strutture dinamiche e più precisamente sulle code.
Ho fatto diciamo il programma però non mi funziona bene.Facendo il debug con il dev-c mi sono accorto di una cosa.Dopo aver inizializzato i puntatori nel main con NULL quando li vado a passare nelle funzioni per inserire ed eliminare un elemento i puntatori cambiao valore passando da null ad due indirizzi separati.Quando la funzione termina e ritorno al main i puntatori perdono il valore acquisito e ritornano a NULL.
Sono disperato vi prego aiutatemi.
Di seguito vi posto il sorgente.
P.S. La versione di dev utilizzata e l'ultima cioè la 5.
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#define max 50
//tipi di dati astratti utilizzati
typedef char stringa[50];
//struttura
struct utente{
int numero;
stringa nome;
struct utente *next;
};
typedef struct utente UTENTE;
typedef UTENTE *nuovoutente;
void pusha(int numero,nuovoutente *testa,nuovoutente *coda);
int poppa(int numero,nuovoutente *testa,nuovoutente *coda);
int main(){
int scelta=0,errore=0;
UTENTE ute;
nuovoutente testa;
nuovoutente coda;
testa=NULL;
coda=NULL;
do{
printf("DIGITA 1 per inserire");
printf("\n");
printf("DIGITA 2 per estrarre");
printf("\n");
printf("DIGITA 3 per uscire");
printf("\n");
scanf("%d",&scelta);
switch(scelta){
case 1:{
printf("Inserisci il numero");
printf("\n");
scanf("%i",&ute.numero);
printf("Inserisci il nome");
printf("\n");
scanf("%s",ute.nome);
printf("\n");
pusha(ute.numero,&testa,&coda);
}break;
case 2:{
errore=poppa(&ute.numero,&testa,&coda);
if(errore==1){
printf("%d",ute.numero);
printf("\n");
}
else printf("La coda e\' vuota\n");
}break;
}
}while(scelta!=3);
system("PAUSE");
return 0;
}
void pusha(int numero,nuovoutente *testa,nuovoutente *coda){
UTENTE *nuovoutente;
nuovoutente=(UTENTE*)malloc(sizeof(UTENTE));
nuovoutente->numero=numero;
nuovoutente->next=NULL;
if(testa==NULL){
*testa=nuovoutente;
*coda=nuovoutente;
}
else{
(*coda)->next=nuovoutente;
*coda=nuovoutente;
}
}
int poppa(int numero,nuovoutente *testa,nuovoutente *coda){
if(testa==NULL){
numero=(*testa)->numero;
(*testa)=(*testa)->next;
return 1;
}
else return 0;
}
Ragazzi sto facendo un programma per l'università sulle strutture dinamiche e più precisamente sulle code.
Ho fatto diciamo il programma però non mi funziona bene.Facendo il debug con il dev-c mi sono accorto di una cosa.Dopo aver inizializzato i puntatori nel main con NULL quando li vado a passare nelle funzioni per inserire ed eliminare un elemento i puntatori cambiao valore passando da null ad due indirizzi separati.Quando la funzione termina e ritorno al main i puntatori perdono il valore acquisito e ritornano a NULL.
Sono disperato vi prego aiutatemi.
Di seguito vi posto il sorgente.
P.S. La versione di dev utilizzata e l'ultima cioè la 5.
#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
#define max 50
//tipi di dati astratti utilizzati
typedef char stringa[50];
//struttura
struct utente{
int numero;
stringa nome;
struct utente *next;
};
typedef struct utente UTENTE;
typedef UTENTE *nuovoutente;
void pusha(int numero,nuovoutente *testa,nuovoutente *coda);
int poppa(int numero,nuovoutente *testa,nuovoutente *coda);
int main(){
int scelta=0,errore=0;
UTENTE ute;
nuovoutente testa;
nuovoutente coda;
testa=NULL;
coda=NULL;
do{
printf("DIGITA 1 per inserire");
printf("\n");
printf("DIGITA 2 per estrarre");
printf("\n");
printf("DIGITA 3 per uscire");
printf("\n");
scanf("%d",&scelta);
switch(scelta){
case 1:{
printf("Inserisci il numero");
printf("\n");
scanf("%i",&ute.numero);
printf("Inserisci il nome");
printf("\n");
scanf("%s",ute.nome);
printf("\n");
pusha(ute.numero,&testa,&coda);
}break;
case 2:{
errore=poppa(&ute.numero,&testa,&coda);
if(errore==1){
printf("%d",ute.numero);
printf("\n");
}
else printf("La coda e\' vuota\n");
}break;
}
}while(scelta!=3);
system("PAUSE");
return 0;
}
void pusha(int numero,nuovoutente *testa,nuovoutente *coda){
UTENTE *nuovoutente;
nuovoutente=(UTENTE*)malloc(sizeof(UTENTE));
nuovoutente->numero=numero;
nuovoutente->next=NULL;
if(testa==NULL){
*testa=nuovoutente;
*coda=nuovoutente;
}
else{
(*coda)->next=nuovoutente;
*coda=nuovoutente;
}
}
int poppa(int numero,nuovoutente *testa,nuovoutente *coda){
if(testa==NULL){
numero=(*testa)->numero;
(*testa)=(*testa)->next;
return 1;
}
else return 0;
}