Salve ragazzi ho qualche problema con questo programma vi posto la consegna:
Definire una struttura che permetta di gestire i dati contenuti in un rubrica telefonica.
Creare un programma in linguaggio C che gestisca l’immissione dei dati da tastiera
dei dati della rubrica. Terminare la procedura di immissione dei dati quando si
verifica una di queste condizioni:
⇒ l’informazione per il campo numero è uguale a -1
⇒ il cognome immesso è uguale ad uno precedentemente immesso
=> Salvare la lista su file
Il programma che ho fatto io è questo
codice:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
typedef struct rubrica
{
char nome[16];
char cognome[16];
char numero[16];
rubrica *next;
} rubrica;
rubrica *Add_to_list(rubrica *head,char nome[],char cognome[],char numero[])
{
rubrica *a;
a=(rubrica*)malloc(sizeof(rubrica));
strcpy(a->nome,nome);
strcpy(a->cognome,cognome);
strcpy(a->numero,numero);
a->next=NULL;
/*if(head==NULL)
return a;*/
a->next=head;
return a;
}
rubrica *Print_list(rubrica *head)
{
int i=0;
printf("Lista: \n");
while(head!=NULL)
{
printf("%d)\nnome:%s\ncognome:%s\nnumero:%s\n",i++,head->nome,head->cognome,head->numero);
head=head->next;
}
}
rubrica *confronto(rubrica *head,char test[])
{
for(; head!=NULL; head=head->next)
{
if(strcmp(head->cognome,test)==0)
{
break;
}
}
}
/*rubrica *Search_in_list(rubrica*head,char test[])
{
if(head==NULL)
return NULL;
while(head!=NULL)
{
if (strcmp(head->cognome,test)!=0)
break;
head=head->next;
}
return NULL;
}*/
rubrica Save_to_file(rubrica *head)
{
FILE*fp;
fp=fopen("fname.txt","w");
if(fp!=NULL)
{
while(head!=NULL)
{
fprintf(fp, "nome:%s\ncognome:%s\nnumero telefonico:%s\n",head->nome,head->cognome,head->numero);
head=head->next;
}
}
}
main()
{
rubrica a;
char file[16];
rubrica*head = NULL;
printf("inserisci elementi \n");
strcpy(a.numero,"0");
while(strcmp(a.numero,"-1")!=0 )
{
printf("Nome:");
scanf("%s",a.nome);
printf("Cognome:");
scanf("%s",a.cognome);
printf("Numero di telefono:");
scanf("%s",a.numero);
getchar();
head=Add_to_list(head,a.nome,a.cognome,a.numero);
confronto(head,a.cognome);
}
Print_list(head);
Save_to_file(head);
getchar();
}
Il programma funziona tutto solo che non riesco a implementare la funzione confronto ovvero nn mi legge il break al suo interno...Se vedete inoltre commentato c'è anche un altro metodo per fare la funzione...
Avete qualche suggerimento da darmi?
Ah vorrei dirvi che il programma secondo consegna del prof a lezione lo posso fare solo con le liste... Preciso che nn si tratta di un compito in classe ma solamente di un'esercitazione da svolgere a casa per acquisire praticità con le liste...
Grazie in anticipo per l'aiuto