Salve a tutti scusate il disturbo. Ho un problema con la funzione visualizza, all'interno di questo programma.
A livello di compilazione sembra che non ci siano problemi, che invece insorgono durante l'esecuzione.codice:#include<iostream> //librerie I/O #include<stdio.h> #include<stdlib.h> //libreria per l'allocazione dinamica della memoria #include<string.h> //libreria per la gestione delle stringhe typedef struct Contatto { char Nome [50]; char Cognome [50]; char Numero [40]; char Email[100]; char IndPaginaWeb [100]; }; //definizione del tipo strutturato contatto struct Elemento; //questo è la pre-dichiarazione degli elementi della lista typedef Elemento *punt; //definizione del puntatore all'elemento successivo typedef struct Elemento { Contatto Informazione; punt next; }; //dichiarazione del nodo completo punt Inserisci (punt q) { char nome[50]; char cognome[50]; char numero[40]; char email[100]; char sitoweb[100]; Contatto Inf; punt p; q= (punt)malloc(sizeof(Elemento)); //dichiarazione di q come record: è un puntatore //allo spazio dati necessario alla rappresentazione del record printf("\n Nome: "); scanf("%s", &nome); strcpy(Inf.Nome, nome); printf("\n Cognome: "); scanf("%s", &cognome); strcpy(Inf.Cognome, cognome); printf("\n Numero: "); scanf("%s", &numero); strcpy(Inf.Numero, numero); printf("\n Email: "); scanf("%s", &email); strcpy(Inf.Email, email); printf("\n Sito Web: "); scanf("%s", &sitoweb); strcpy(Inf.IndPaginaWeb, sitoweb); q->Informazione = Inf; p=q->next; bool PosTrovata = 0; if (p=NULL) p=q; else while ((p!=NULL) && (PosTrovata ==0)) { if(Inf.Nome>p->Informazione.Nome) p=p->next; if(Inf.Nome<=p->Informazione.Nome) PosTrovata= 1; } return (q); } void Visualizza (punt q) { int i=0; if(q==NULL) printf("Non e' presente alcun contatto \n"); while (q!=NULL) { i++; printf("\n \n Il contatto %d e' il seguente: \n", i); printf("Nome: %s", q->Informazione.Nome); printf("\n Cognome: %s", q->Informazione.Cognome); printf("\n Numero: %s", q->Informazione.Numero); printf("\n Email: %s", q->Informazione.Email); printf("\n Sito Web: %s", q->Informazione.IndPaginaWeb); q=q->next; // NB QUESTA FUNZIONE NON VA } } int main () { int i; Contatto I; punt puntatore = NULL; do { printf("\n Cosa vuoi fare?\n"); printf("1- #AGGIUNGI CONTATTO# \n"); printf("2- #CERCA CONTATTO# \n"); printf("3- #ELIMINA CONTATTO#\n"); printf("4- #ELIMINA TUTTI I CONTATTI PRESENTI#\n"); printf("5- #VISUALIZZA TUTTI I CONTATTI#\n"); printf("6- #MODIFICA CONTATTO# \n"); printf("7- #ESCI#\n"); scanf (" %d", &i); switch(i) { case 1: { printf("#AGGIUNGI CONTATTO#\n"); puntatore=Inserisci (puntatore); break;} case 2: printf ("#CERCA CONTATTO#\n"); break; case 3: printf("#ELIMINA CONTATTO#\n"); break; case 4: printf("#ELIMINA TUTTI I CONTATTI PRESENTI#\n"); break; case 5: { printf("#VISUALIZZA TUTTI I CONTATTI#\n"); Visualizza(puntatore); break;} case 6: printf("#MODIFICA CONTATTO#\n"); break; } } while (i!=7); if (i=7) return 0; system("PAUSE"); return 0 ; }
Praticamente nel momento in cui utilizzo la funzione visualizza e non sono presenti contatti, la funzione va, dunque non credo che nella prima parte della funzione vi siano problemi. Quando, ,dopo aver inserito dei contatti, provo a visualizzarli, viene visualizzato solo l'ultimo contatto inserito, e dopo che viene stampato a video, il computer mi dice che c'è stato un errore nel programma.... Sto iniziando a pensare che ci siano problemi nella funzione Inserisci, a questo punto....

Rispondi quotando