codice:
#include <stdio.h>
#include <iostream>
#include <string.h>
typedef struct
{
char Nome[30]; //nome del contatto
char Cognome[30]; //cognome del contatto
char Tel[30]; //numero di telefono del contatto
char Indirizzopaginaweb[50]; //indirizzo di pagina web
char Indirizzoemail[50];
} Contatto;
struct elemento
{
Contatto inf;
struct elemento *pun;
};
void visualizzaContatto(struct elemento* p)
{
if (p == NULL)
{
/* Se non ci sono contatti lo stampo a video*/
printf (" # VISUALIZZA CONTATTO #\n");
printf (" Nessun contatto presente\n");
} else {
/*Stampo il primo contatto presente*/
printf (" # VISUALIZZA CONTATTO #\n");
printf (" NOME > %s\n", p->inf.Nome);
printf (" COGNOME > %s\n", p->inf.Cognome);
printf (" TELEFONO > %s\n", p->inf.Tel);
printf (" SITOWEB > %s\n", p->inf.Indirizzopaginaweb);
printf (" EMAIL > %s\n", p->inf.Indirizzoemail);
}
while (p != NULL)
{
/* Stampo gli altri contatti*/
printf (" # VISUALIZZA CONTATTO #\n");
printf (" NOME > %s\n", p->inf.Nome);
printf (" COGNOME > %s\n", p->inf.Cognome);
printf (" TELEFONO > %s\n", p->inf.Tel);
printf (" SITOWEB > %s\n", p->inf.Indirizzopaginaweb);
printf (" EMAIL > %s\n", p->inf.Indirizzoemail);
// Leggo l'elemento successivo
p = p->pun;
}
}
struct elemento *aggiungiContatto(struct elemento *p)
{
printf (" # AGGIUNGI CONTATTO #\n");
// Dichiaro le variabili
char nome[50];
char cognome[50];
char telefono[30];
char email[100];
char sitoweb[200];
Contatto daInserire;
struct elemento *punt;
// Popolo la variabile daInserire
printf (" NOME > ");
scanf ("%s", nome);
strcpy(daInserire.Nome, nome);
printf (" COGNOME > ");
scanf ("%s", cognome);
strcpy(daInserire.Cognome, cognome);
printf (" TELEFONO > ");
scanf ("%s", telefono);
strcpy(daInserire.Tel, telefono);
printf (" SITOWEB > ");
scanf ("%s", sitoweb);
strcpy(daInserire.Indirizzopaginaweb, sitoweb);
printf (" EMAIL > ");
scanf ("%s", email);
strcpy(daInserire.Indirizzoemail, email);
if(p != NULL)
{
/* creazione elementi successivi */
// Alloco la memoria necessaria
punt = (struct elemento *)malloc(sizeof(struct elemento));
// Metto daInserire nell'informazione del puntatore
punt->inf = daInserire;
// Metto il puntatore in testa alla lista
punt->pun = p;
} else {
/* creazione primo elemento */
// Alloco la memoria necessaria
p = (struct elemento *)malloc(sizeof(struct elemento));
// Metto daInserire nell'informazione del puntatore
p->inf = daInserire;
// p punta a NULL, ovvero il marcatore di fine lista
p->pun = NULL;
// Assegno p a punt
punt = p;
}
// Esce dalla funzione e restituisce la lista
return(punt);
}
struct elemento *rimuoviContatto(struct elemento *p)
{
// Dichiaro le variabili
struct elemento *aus;
struct elemento *twin = p;
int subscelta;
int i=1;
int n=1;
// Stampo la schermata
printf (" # RIMUOVI CONTATTO #\n");
// Stampo la lista di contatti
while (p != NULL)
{
printf ("%i) \t %s \t %s\n", i, p->inf.Nome, p->inf.Cognome);
p = p->pun; // scorre di un elemento
i++;
}
// Ottengo il valore originario di p
p = twin;
// Scelgo l'emento da eliminare
printf("\n\n Inserisci il numero del contatto che vuoi rimuovere: ");
scanf("%i", &subscelta);
if (subscelta < i)
{
// Se la lista èvuota esco
if(p == NULL)
return 0;
// Se la lista ha almeno due elmenti...
if(p->pun != NULL)
{
// ... inizializzo un puntatore ausiliario ...
aus=p;
n++;
// ... e faccio un ciclo per trovare l'elemento da eliminare ...
while(n != i)
{
// Trovato l'elemento gli faccio puntare l'oggetto puntato dal suo
// puntatore, in poche parole "salto" l'elemento da eliminare
if(subscelta == n)
{
aus->pun=aus->pun->pun;
} else {
// Nel caso in cui il puntatore fosse NULL, per non creare casini
// glielo assegniamo direttamente
aus=aus->pun;
}
n++;
}
}
/*Se si vuole rimuovere il primo elemento, si assegna
* a p il valore del suo oggetto puntato; questo accade quando subscelta == 1*/
if(subscelta == 1)
{
p=p->pun;
}
}
// Copia di nuovo il valore p modificato in twin
twin = p;
// Esce dalla funzione e restituisce la lista
return twin;
}
void cerca(struct elemento *p){
int n;
int i;
int s=14;
char c[100];
struct elemento ;
printf("dammi il cognome che stai cercando\n");
scanf("%s",&c);
for (i=0;i<n;)
if(strcmp(c,p->inf.Cognome)!=atoi(p->inf.Cognome)){
printf("il cognome trovato è:\n");
printf("nome %s \ncognome %s\ntelefono %s\npagina web %s\nemail %s\n\n",p->inf.Nome,p->inf.Cognome,p->inf.Tel,p->inf.Indirizzopaginaweb,p->inf.Indirizzoemail);
system("PAUSE");
break;
}else if(strcmp(c,p->inf.Cognome)!=atoi(p->inf.Cognome)){
printf("riprovaci:\n");
printf("nome %s \ncognome %s\ntelefono %s\npagina web %s\nemail %s\n\n",p->inf.Nome,p->inf.Cognome,p->inf.Tel,p->inf.Indirizzopaginaweb,p->inf.Indirizzoemail);
system("PAUSE");
break;
}else{
printf("\nERRORE: nessun elemento corrisponde a quello che stai cercando\n\n");
system("PAUSE");
break;
}}
int main()
{
// dichiaro la variabile scelta e la lista vuota
int scelta;
struct elemento *lista = NULL;
{
// Stampo il menu
do
{
printf (" 1) VISUALIZZA CONTATTO\n\n");
printf (" 2) AGGIUNGI CONTATTO\n\n");
printf (" 3) RIMUOVI CONTATTO\n\n");
printf (" 4) CERCA CONTATTO\n\n");
printf (" 5) ESCI\n\n\n\n");
printf (" la tua scelta > ");
scanf("%d",&scelta);
system("CLS");
switch(scelta)
{
case 1: // Visualizzo i contatti presenti
{
visualizzaContatto(lista);
break;
}
case 2: // Aggiungo un nuovo contatto
{
lista = aggiungiContatto(lista);
break;
}
case 3:
{
lista = rimuoviContatto(lista);
break;
}
case 4:
{
lista = cerca(lista);
break;
}
system("PAUSE");
system("CLS");
}}while(scelta!=5);
return 0;
}}
mi da un errore in questa stringa e poi volevo chiedervi se questo codice va bene perchè secondo me la funzione cerca mi dara dei problemi mi potete dare dei consigli