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:
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.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!");
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!"); }

Rispondi quotando