Salve a tutti scusate il disturbo. Ho un problema con la funzione visualizza, all'interno di questo programma.
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 ;
}
A livello di compilazione sembra che non ci siano problemi, che invece insorgono durante l'esecuzione.
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....