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