Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    1

    Problemi con le funzioni di un programma in c

    Salve a tutti scusate il disturbo. Ho un problema con la funzione visualizza, all'interno di questo programma.

    codice:
    #include<iostream> //librerie I/O
    #include<stdio.h> 
    #include<stdlib.h> //libreria per l'allocazione dinamica della memoria
    #include<string.h> //libreria per la gestione delle stringhe
    
    typedef struct Contatto {
                            char Nome [50];
                            char Cognome [50];
                            char Numero [40];
                            char Email[100];
                            char IndPaginaWeb [100];
                            }; //definizione del tipo strutturato contatto
    
    struct Elemento; //questo è la pre-dichiarazione degli elementi della lista
    typedef Elemento *punt; //definizione del puntatore all'elemento successivo
    
    typedef struct Elemento {
                            Contatto Informazione;
                            punt next;
                            }; //dichiarazione del nodo completo
    
    punt Inserisci (punt q)
         { char nome[50];
           char cognome[50];
           char numero[40];
           char email[100];
           char sitoweb[100];
           Contatto Inf;
           punt p;
           q= (punt)malloc(sizeof(Elemento)); //dichiarazione di q come record: è un puntatore 
           //allo spazio dati necessario alla rappresentazione del record
           printf("\n Nome: ");
           scanf("%s", &nome);
           strcpy(Inf.Nome, nome);
           printf("\n Cognome: ");
           scanf("%s", &cognome);
           strcpy(Inf.Cognome, cognome);
           printf("\n Numero: ");
           scanf("%s", &numero);
           strcpy(Inf.Numero, numero);
           printf("\n Email: ");
           scanf("%s", &email);
           strcpy(Inf.Email, email);
           printf("\n Sito Web: ");
           scanf("%s", &sitoweb);  
           strcpy(Inf.IndPaginaWeb, sitoweb);
           q->Informazione = Inf;
           p=q->next;
           bool PosTrovata = 0;
            if (p=NULL) p=q;
            else while ((p!=NULL) && (PosTrovata ==0))
                 { 
                   if(Inf.Nome>p->Informazione.Nome) p=p->next;
                   if(Inf.Nome<=p->Informazione.Nome) PosTrovata= 1;
                 }
          
           return (q);
           }
    
    void Visualizza (punt q) 
         {
          int i=0;
          if(q==NULL) printf("Non e' presente alcun contatto \n");
          while (q!=NULL) 
                { 
                  i++;
                  printf("\n \n Il contatto %d e' il seguente: \n", i);
                  printf("Nome: %s", q->Informazione.Nome);
                  printf("\n Cognome: %s", q->Informazione.Cognome);
                  printf("\n Numero: %s", q->Informazione.Numero);
                  printf("\n Email: %s", q->Informazione.Email);
                  printf("\n Sito Web: %s", q->Informazione.IndPaginaWeb);
                  q=q->next; // NB QUESTA FUNZIONE NON VA
                  } 
          }               
          
                  
                  
    int main ()
        { int i;
          Contatto I; punt puntatore = NULL;
    
          do {
              printf("\n Cosa vuoi fare?\n");
              printf("1- #AGGIUNGI CONTATTO# \n");
              printf("2- #CERCA CONTATTO# \n");
              printf("3- #ELIMINA CONTATTO#\n");
              printf("4- #ELIMINA TUTTI I CONTATTI PRESENTI#\n");
              printf("5- #VISUALIZZA TUTTI I CONTATTI#\n");
              printf("6- #MODIFICA CONTATTO# \n");
              printf("7- #ESCI#\n");
              scanf (" %d", &i);
    
              switch(i) {
                         case 1: {
                                  printf("#AGGIUNGI CONTATTO#\n");
                                  puntatore=Inserisci (puntatore); break;}
    
                         case 2: printf ("#CERCA CONTATTO#\n"); break;
                         case 3: printf("#ELIMINA CONTATTO#\n"); break;
                         case 4: printf("#ELIMINA TUTTI I CONTATTI PRESENTI#\n"); break;
                         case 5: {
                                  printf("#VISUALIZZA TUTTI I CONTATTI#\n"); 
                                  Visualizza(puntatore); break;} 
    
                         case 6: printf("#MODIFICA CONTATTO#\n"); break;
                         }
    
           } while (i!=7);
    
           if (i=7) return 0;
           system("PAUSE");
           return 0 ;
           }
    A livello di compilazione sembra che non ci siano problemi, che invece insorgono durante l'esecuzione.
    Praticamente nel momento in cui utilizzo la funzione visualizza e non sono presenti contatti, la funzione va, dunque non credo che nella prima parte della funzione vi siano problemi. Quando, ,dopo aver inserito dei contatti, provo a visualizzarli, viene visualizzato solo l'ultimo contatto inserito, e dopo che viene stampato a video, il computer mi dice che c'è stato un errore nel programma.... Sto iniziando a pensare che ci siano problemi nella funzione Inserisci, a questo punto....

  2. #2
    Allora, poniamo in essere che vada inserisci, essendo una lista, secondo me sarebbe meglio se utilizzassi una funzione ricorsiva del tipo.

    codice:
    void stampa(Elemento* a)
    {
         if(a==NULL)  return;
         else
         {
                printf(Nome....ecc ecc .....);
    
                stampa(a->next);
         }
    
    }
    dovrebbe funzionare (se inserisci i dati corettamente)

    PS: ma se hai definito un tipo contatto strutturato, perchè poi quando fai inserisci il nome non lo salvi in contatto->nome?

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,466

    Moderazione

    Il codice va formattato usando l'apposito tag [CODE], come da Regolamento.

    Qui ho provveduto io, modificando anche il titolo; in futuro, provvedi tu.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

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.