Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C] ricerca su una lista

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

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    41
    E' sbagliato il codice di acquisizione, questa è la sintassi giusta:

    scanf ("%f", &media);

    Stefano.

  3. #3
    grazie mille!! ora funziona tutto perfettamente..
    un ultima domanda come dovrei cambiare il codice per usare questa funzione ricerca in un altra funzione ad esempio nella funzione modifica contatto?cioe cosa passare e cosa fargli restituire alla funzione..
    Scusate ma ho iniziato ora a studiare le liste e mi confondo parecchio :S

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.