Ciao a tutti ho creato un semplice programma in cui vado a memorizzare in una lista i dati di alcuni studenti il programma in sostanza deve visualizzare i dati modificarli o cancellarli ed effetuare una ricerca per trovare lo studente.
Ecco come ho impostato la funzione ricerca:
codice:
struct elemento *cercaElemento (struct elemento *p){
char matr [50];
int prova=0;
printf ("inserisci la matricola da cercare\n");
scanf("%s",matr);
do{
if (strcmp(p->inf.matricola,matr)==0){
printf("%s\t",p->inf.nome);
printf("%s\n\n",p->inf.cognome);
prova=1;
}
p=p->pun;
}while(p!=NULL && prova==0);
if(prova==0)
printf("\nMatricola non trovata!");
Inoltre ho un altro problema con questo programma quando vado ad eseguirlo e inizio ad inserire i dati mi va in crash appena inserisco la media dello studente.
qui c'è il codice completo:
codice:
#include <stdio.h>
#include <string.h>
typedef struct
{
char nome[50];
char cognome[50];
char matricola[30];
float media;
} t_studente;
struct elemento
{
t_studente inf;
struct elemento *pun;
};
void visualizzaContatto(struct elemento* p);
struct elemento *aggiungiContatto(struct elemento *p);
struct elemento *modificaContatto(struct elemento *p);
struct elemento *rimuoviContatto(struct elemento *p);
struct elemento *cercaElemento (struct elemento *p);
int salvaSuFile(struct elemento *p);
int main()
{
int scelta;
struct elemento *lista = NULL;
for ( ; ; )
{
printf (" 1) VISUALIZZA CONTATTO\n\n");
printf (" 2) AGGIUNGI CONTATTO\n\n");
printf (" 3) MODIFICA CONTATTO\n\n");
printf (" 4) RIMUOVI CONTATTO\n\n");
printf (" 5) SALVA CONTATTI SU FILE\n\n");
printf (" 6) CERCA CONTATTO\n\n");
printf (" 0) ESCI\n\n\n\n");
printf (" la tua scelta > ");
scanf ("%i", &scelta);
scelta = (int)scelta;
if (scelta == 0)
{
break;
}
else if (scelta == 1)
{
visualizzaContatto(lista);
}
else if (scelta == 2)
{
lista = aggiungiContatto(lista);
}
else if (scelta == 3)
{
lista = modificaContatto(lista);
}
else if (scelta == 4)
{
lista = rimuoviContatto(lista);
}
else if (scelta == 5)
{
salvaSuFile(lista);
}
else if (scelta == 6)
{
cercaElemento(lista);
}
printf("\n");
printf("##### \n\n\n");
}
}
void visualizzaContatto(struct elemento* p)
{
if (p == NULL)
{
printf (" Nessun studente presente\n");
}
else {
printf (" NOME > %s\n", p->inf.nome);
printf (" COGNOME > %s\n", p->inf.cognome);
printf (" MATRICOLA > %s\n", p->inf.matricola);
printf (" MEDIA > %f\n", p->inf.media);
}
while (p != NULL)
{
printf (" NOME > %s\n", p->inf.nome);
printf (" COGNOME > %s\n", p->inf.cognome);
printf (" MATRICOLA > %s\n", p->inf.matricola);
printf (" MEDIA > %f\n", p->inf.media);
p = p->pun;
}
return;
}
struct elemento *aggiungiContatto(struct elemento *p)
{
char nome[50];
char cognome[50];
char matricola[30];
float media;
t_studente daInserire;
struct elemento *punt;
printf (" NOME > ");
scanf ("%s", nome);
strcpy(daInserire.nome, nome);
printf (" COGNOME > ");
scanf ("%s", cognome);
strcpy(daInserire.cognome, cognome);
printf (" MATRICOLA > ");
scanf ("%s", matricola);
strcpy(daInserire.matricola, matricola);
printf (" MEDIA > ");
scanf ("%f", media);
daInserire.media=media;
if(p != NULL)
{
punt = (struct elemento *)malloc(sizeof(struct elemento));
punt->inf = daInserire;
punt->pun = p;
}
else {
p = (struct elemento *)malloc(sizeof(struct elemento));
p->inf = daInserire;
p->pun = NULL;
punt = p;
}
return(punt);
}
struct elemento *modificaContatto(struct elemento *p)
{
struct elemento *twin = p;
int subscelta;
int i=1;
int n=1;
while (p != NULL)
{
printf ("%i) \t %s \t %s\n", i, p->inf.nome, p->inf.cognome);
p = p->pun;
i++;
}
p = twin;
printf("\n\n Inserisci il numero del contatto che vuoi modificare: ");
scanf("%i", &subscelta);
for (n=1; n<i; n++)
{
if (subscelta == n)
{
printf (" NOME [%s] > ", p->inf.nome);
scanf ("%s", p->inf.nome);
printf (" COGNOME [%s] > ", p->inf.cognome);
scanf ("%s", p->inf.cognome);
printf (" MATRICOLA [%s] > ", p->inf.matricola);
scanf ("%s", p->inf.matricola);
printf (" MEDIA [%f] > ", p->inf.media);
scanf ("%f", p->inf.media);
}
p = p->pun;
}
return twin;
}
struct elemento *rimuoviContatto(struct elemento *p)
{
struct elemento *aus;
struct elemento *twin = p;
int subscelta;
int i=1;
int n=1;
while (p != NULL)
{
printf ("%i) \t %s \t %s\n", i, p->inf.nome, p->inf.cognome);
p = p->pun;
i++;
}
p = twin;
printf("\n\n Inserisci il numero del contatto che vuoi rimuovere: ");
scanf("%i", &subscelta);
if (subscelta < i)
{
if(p == NULL)
return;
if(p->pun != NULL)
{
aus=p;
n++;
while(n != i)
{
if(subscelta == n)
{
aus->pun=aus->pun->pun;
}
else {
aus=aus->pun;
}
n++;
}
}
if(subscelta == 1)
{
p=p->pun;
}
}
twin = p;
return twin;
}
int salvaSuFile(struct elemento *p)
{
FILE *stream = fopen("rubrica.txt","w");
while (p != NULL)
{
fprintf(stream, "%s,%s,%s,%f\n", p->inf.nome, p->inf.cognome, p->inf.matricola, p->inf.media);
p = p->pun;
}
fflush(stream);
fclose(stream);
return;
}
struct elemento *cercaElemento (struct elemento *p){
char matr [50];
int prova=0;
printf ("inserisci la matricola da cercare\n");
scanf("%s",matr);
do{
if (strcmp(p->inf.matricola,matr)==0){
printf("%s\t",p->inf.nome);
printf("%s\n\n",p->inf.cognome);
prova=1;
}
p=p->pun;
}while(p!=NULL && prova==0);
if(prova==0)
printf("\nMatricola non trovata!");
}