Dubbi su lista ordinata ( anagrafe)

di il
11 risposte

Dubbi su lista ordinata ( anagrafe)

Ragazzi qualcuno che abbia la buona volontà di aiutarmi ad individuare errori su questo programma ??!!

#include <stdio.h>
#include <string.h>

#define MAXELE 30
#define DIM 31
#define MENU 0
#define INS 1
#define CAN 2
#define RIC 3
#define VIS 4
#define OUT 100

struct per {
       char nome[DIM];
       char cognome[DIM];
       char indirizzo[DIM];
       int eta;
       };
       
struct per anag[MAXELE];
       int index=0;
       int menper(void);
       int insper(void);  
       struct per * cerper(char *, char *, int);
       void eliper(struct per *);
       void canper(void);
       void ricper(void);
       void visper(struct per *);
       void visanagrafe(void);
       
      void int main(){
            
       int scelta = MENU;
       while(scelta != OUT){
                          switch(scelta) {
                                         case MENU:
                                         scelta=menper();
                                         if(scelta==MENU)
                                         scelta=OUT;
                                         break;
                                         
                                         case INS:
                                         index = insper(index);
                                         scelta=MENU;
                                         break;
                                         
                                         case CAN:
                                         canper();
                                         scelta = MENU;
                                         break;
                                         
                                         case RIC:
                                         ricper();
                                         scelta = MENU;
                                         break;
                                         
                                         case VIS:
                                         visanagrafe();
                                         scelta = MENU;
                                         break; }
}
}

int menper(void)
{
    int scelta;
    char invio;
    int vero=1;
    while(vero) {
                printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                printf("\t\t\t\t ANAGRAFE");
                printf("\n\n\n\n\t\t\t\t 1. IMMISSIONE PERSONA");
                printf("\n\n\n\n\t\t\t\t 2. CANCELLAZIONE PERSONA");
                printf("\n\n\n\n\t\t\t\t 3. RICERCA PERSONA" );
                printf("\n\n\n\n\t\t\t\t 4. VISUALIZZA PERSONA");
                printf("\n\n\n\n\t\t\t\t 5. FINE");
                printf("\n\n\n\n\t\t\t\t SCEGLIERE UN OPZIONE");
                scanf("%d",&scelta);
                scanf("%c",&invio);
                printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
                 switch (scelta){
                        case 0 :
                         case 1 :
                         case 2 :
                         case 3 :
                         case 4 :
                              return(scelta); 
                              default:
                              break;}
                              }
                              return(0);
                                             }
                                             
                                             int insper () {
                                                 char invio;
                                                 if(pos>= MAXELE){
                                                          printf(" NON SI POSSONO INSERIRE ALTRI NOMI");
                                                          scanf("%c", &invio);
                                                          return(pos);}
                                                          
                                                          printf("\n\t\tINSERIMENTO PERSONA ");
                                                          printf("\n\t\t----------------\n\n\n");
                                                          printf("\nCognome : ");
                                                          gets( anag[pos] .cognome);
                                                          printf("\nNome : ");
                                                          gets(anag[pos] .nome);
                                                          printf("\nIndirizzo : ");
                                                          gets(anag[pos].indirizzo);
                                                          printf("\nEta : ");
                                                          scanf("%d", &anag[pos].eta);
                                                          scanf("%c", & invio);
                                                          pos++;
                                                          return(pos);}
                                                          
                void canper()
                {
                     char pausa ;
                     char cognome[DIM];
                     char nome [DIM];
                     int eta;
                     struct per *ps;
                     printf("\n\t\tCANCELLA" );
                     printf("\n\t\t------\n\n");
                     printf("nCognome : ");
                     gets(cognome);
                     printf("\nNome : ");
                     gets(nome);
                     printf("\nEta : ");
                     scanf("%d", &eta);
                     scanf("%c", &pausa);
                     ps=cerper(cognome,nome,eta);
                     if(ps==NULL) {
                                  printf("\nPersona non presente in anagrafe");
                                  scanf("%c", &pausa);
                                  return;
                                  }
                                  
                                  visper(ps);
                                  printf("\nConfermi cancellazione? (S/N) ");
                                  scanf("%c", &pausa);
                                  if (pausa=='S' || pausa=='S') {
                                                 eliper(ps);
                                                 return;
                                                 }
                                                 }
               void eliper(struct per *p)
               {
                    strcpy(p->cognome, " ");
                    strcpy(p->nome ," ");
                    strcpy(p->indirizzo, " ");                                                                       
                    p->eta=0;
                    }
                    
                    void ricper(void)
                    {
                         char pausa ;
                         char cognome[DIM];
                         char nome[DIM];
                         int eta;
                         struct per *ps;
                         printf("\n\n\nRICERCA PERSONA ");
                         printf("\n\t\t-------\n\n");
                         printf("\nCognome : ");
                         gets(cognome);
                         printf("\nNome :  ");
                         gets(nome);
                         printf("\nEta : ");
                         scanf("%d" , &eta);
                         scanf("%c", &pausa);
                         ps= cerper(cognome,nome,eta);
                         if(ps==NULL){
                                      printf("\nPersona non presente in anagrafe");
                                      scanf("%c",&pausa);
                                      return;
                                      }
                                      visper(ps);
                                      scanf("%c", &pausa);}
                                      
                                      struct per *cerper(char *cg, char *nm, int et)
                                      {
                                             int i;
                                             for(i=0; i<= index; i++) {
                                                      if(strcmp(cg, anag[i].cognome)==0)
                                                      if(strcmp(nm, anag[i].nome)==0)
                                                      if(et==anag[i].eta)
                                                      return(&anag[i]);
                                                      }
                                                      return(NULL);
                                                      }
                                                      
                                                      void visper(struct per *p)
                                                      {
                                                           printf("\n\n---------------------\n");
                                                           printf("\n\t\tCognome : %s", p->cognome);
                                                           printf("n\t\tNome : %s", p->nome);    
                                                           printf("n\t\tIndirizzo : %s", p->indirizzo);
                                                           printf("n\t\tEta : %d", p->eta);
                                                           printf("\n\n----------------------\n");
                                                           }
                                                           
                                                           void visAnagrafe(void)
                                                           {
                                                                int i;
                                                                char pausa;
                                                                struct per *ps= &anag[0];
                                                                for(i=0; i<= index; i ++);
                                                                {
                                                                         visper(ps++);
                                                                         scanf("%c", &pausa);
                                                                         }
                                                                         }
Fine della conversazione in chat

11 Risposte

  • Re: Dubbi su lista ordinata ( anagrafe)

    Ancora NON hai capito come funziona questo (e altri) forum.

    Devi dare tutte le spiegazioni del caso, specialmente su cosa fa e non fa il programma.
    Se ci sono degli errori devi indicarli (messaggio e linea) e poi si discute.
    Se ci sono malfunzionamenti li devi indicare e fare anche un ragionamento sulle possibile cause.

    Questo NON è un servizio di consulenza o un professore gratuito al tuo servizio.
  • Re: Dubbi su lista ordinata ( anagrafe)

    Pulitu, si puo cercare di essere piu gentili nei confronti di persone che chiedono aiuto , invece no, si cerca essere sempre i primi a polemizzare e tu oregon sei uno di questi..
  • Re: Dubbi su lista ordinata ( anagrafe)

    Cosa ti dice il compilatore?
    Trovarti gli errori significa aprire un IDE, buttare il codice dentro, compilarlo, linkarlo se il primo non fallisce e poi provare ad eseguirlo e quindi vedere se si esegue in modo eccellente, quindi eseguire il debug.


    Se il compilatore fallisce bisogna trovare gli errori gramatticali e/o battitura.
    Se non fallisce trovare gli errori dell'algoritmo quindi concettuali e questo si risolve col debug

    Ciò che tu stai chiedendo è proprio questo.
    Sei sicuro di voler proprio chiedere questo?
    Cosa hai fatto fino ad adesso percui non sai più come muoverti?

    Oregon in un certo senso ha ragione in quanto questo è un lavoro abbastanza impegnativo e SI PUO FARE ma solo se l'interessato ci ha provato, ha fato vedere che effetivamente non riesce a risolvere gli errori o altro. Ma con una richiesta del genere credo chiunque ti direbbe le stesse cose. E' inutile arrabbiarsi se prima non si è dalla parte della ragione per farlo.

    Come dico sempre io: Aiutati e sarai aiutato.
    Peace and love
  • Re: Dubbi su lista ordinata ( anagrafe)

    daniele90 ha scritto:


    pulitu, si puo cercare di essere piu gentili nei confronti di persone che chiedono aiuto , invece no, si cerca essere sempre i primi a polemizzare e tu oregon sei uno di questi..
    Se guardi bene, sono uno dei pochi che ti ha aiutato. E più volte ti ho invitato a sforzarti di collaborare senza chiedere pappa pronta. Ma se non capisci non è colpa mia e me ne farò una ragione, non preoccuparti.
  • Re: Dubbi su lista ordinata ( anagrafe)

    Mi basterebbe capire l'errore " void int main()", proprio non riesco a capirlo!!!
  • Re: Dubbi su lista ordinata ( anagrafe)

    void int main()
    void main() significa che la funziona non ritorna nulla //non più permessa dallo standard
    int main() significa che la funzione ritorna un int //il metodo giusto
    void int main() non fa parte del C/C++ perche la sintassi è sbagliata, quindi basterebbe usare
    int main()
  • Re: Dubbi su lista ordinata ( anagrafe)

    Un altro errore che proprio non riesco a capire è perche mi segna errore scelta =menper(); 7 righe sotto... !!!
  • Re: Dubbi su lista ordinata ( anagrafe)

    Errore del tipo?
  • Re: Dubbi su lista ordinata ( anagrafe)

    "void value not ignored as it ought to be"
  • Re: Dubbi su lista ordinata ( anagrafe)

    daniele90 ha scritto:


    un altro errore che proprio non riesco a capire è perche mi segna errore scelta =menper(); 7 righe sotto... !!!
    In quella linea non ci sono errori. Forse sarà un'altra
  • Re: Dubbi su lista ordinata ( anagrafe)

    Ma che monitor usi?
    Hai una indentazione veramente orrida,scusamo ma ho perso 12 minuti solo per indentare il codice in modo da capirci qualcosa.O è solo problema del mio monitor???

    Dato che cero ho fatto un paio di modifiche commentando grossolanamente gli errori.
    Dubito che però possa funzionare.
    
    #include <stdio.h>
    #include <string.h>
    
    #define MAXELE 30
    #define DIM 31
    #define MENU 0
    #define INS 1
    #define CAN 2
    #define RIC 3
    #define VIS 4
    #define OUT 100
    
    struct per
    {
        char nome[DIM];
        char cognome[DIM];
        char indirizzo[DIM];
        int eta;
    };
    
    struct per anag[MAXELE];
    int index=0;
    int menper(void);
    int insper(void);
    struct per * cerper(char *, char *, int);
    void eliper(struct per *);
    void canper(void);
    void ricper(void);
    void visper(struct per *);
    //void visanagrafe(void);
    void visAnagrafe(void);
    
    int main()
    {
        int scelta = MENU;
        while(scelta != OUT)
        {
            switch(scelta)
            {
                case MENU:
                    scelta=menper();
                    if(scelta==MENU)
                        scelta=OUT;
                break;
    
                case INS:
                    //index = insper(index);//error: too many arguments to function 'insper'|
                    index = insper();
                    scelta=MENU;
                break;
    
                case CAN:
                    canper();
                    scelta = MENU;
                break;
    
                case RIC:
                    ricper();
                    scelta = MENU;
                break;
    
                case VIS:
                    //visanagrafe();
                    visAnagrafe();
                    scelta = MENU;
                break;
            }//switch scelta
        }//loop scelta
    
        return 0; //MAIN IS A INT
    }//main
    
    int menper(void)
    {
        int scelta;
        char invio;
        int vero=1;
        while(vero)
        {
            printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            printf("\t\t\t\t ANAGRAFE");
            printf("\n\n\n\n\t\t\t\t 1. IMMISSIONE PERSONA");
            printf("\n\n\n\n\t\t\t\t 2. CANCELLAZIONE PERSONA");
            printf("\n\n\n\n\t\t\t\t 3. RICERCA PERSONA" );
            printf("\n\n\n\n\t\t\t\t 4. VISUALIZZA PERSONA");
            printf("\n\n\n\n\t\t\t\t 5. FINE");
            printf("\n\n\n\n\t\t\t\t SCEGLIERE UN OPZIONE");
            scanf("%d",&scelta);
            scanf("%c",&invio);
            printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            switch (scelta)
            {
                case 0 :
                case 1 :
                case 2 :
                case 3 :
                case 4 :
                    return(scelta);
                default:
                break;
            }//switch scelta
        }//loop vero
        return(0);
    }//menper
    
    int insper ()
    {
        char invio;
        if(pos>= MAXELE) //NON SO COSA SIA POS E DOVE TU L'ABBIA DICHIARATO
        {
            printf(" NON SI POSSONO INSERIRE ALTRI NOMI");
            scanf("%c", &invio);
            return pos;
        }
    
        printf("\n\t\tINSERIMENTO PERSONA ");
        printf("\n\t\t----------------\n\n\n");
        printf("\nCognome : ");
        gets( anag[pos] .cognome);
        printf("\nNome : ");
        gets(anag[pos] .nome);
        printf("\nIndirizzo : ");
        gets(anag[pos].indirizzo);
        printf("\nEta : ");
        scanf("%d", &anag[pos].eta);
        scanf("%c", & invio);
        pos++;
        return pos;
    }//insper
    
    void canper()
    {
        char pausa ;
        char cognome[DIM];
        char nome [DIM];
        int eta;
        struct per *ps;
    
        printf("\n\t\tCANCELLA" );
        printf("\n\t\t------\n\n");
        printf("nCognome : ");
        gets(cognome);
        printf("\nNome : ");
        gets(nome);
        printf("\nEta : ");
        scanf("%d", &eta);
        scanf("%c", &pausa);
        ps=cerper(cognome,nome,eta);
    
        if(ps==NULL)
        {
            printf("\nPersona non presente in anagrafe");
            scanf("%c", &pausa);
            return;
        }
    
        visper(ps);
        printf("\nConfermi cancellazione? (S/N) ");
        scanf("%c", &pausa);
    
        if (pausa=='S' || pausa=='S')
        {
            eliper(ps);
            return;
        }
    }//canper
    
    void eliper(struct per *p)
    {
        strcpy(p->cognome, " ");
        strcpy(p->nome ," ");
        strcpy(p->indirizzo, " ");
        p->eta=0;
    }
    
    void ricper(void)
    {
        char pausa ;
        char cognome[DIM];
        char nome[DIM];
        int eta;
        struct per *ps;
        printf("\n\n\nRICERCA PERSONA ");
        printf("\n\t\t-------\n\n");
        printf("\nCognome : ");
        gets(cognome);
        printf("\nNome :  ");
        gets(nome);
        printf("\nEta : ");
        scanf("%d" , &eta);
        scanf("%c", &pausa);
        ps= cerper(cognome,nome,eta);
    
        if(ps==NULL)
        {
            printf("\nPersona non presente in anagrafe");
            scanf("%c",&pausa);
            return;
        }
    
        visper(ps);
        scanf("%c", &pausa);
    }//ricper
    
    struct per *cerper(char *cg, char *nm, int et)
    {
        int i;
        for(i=0; i<= index; i++)
        {
            if(strcmp(cg, anag[i].cognome)==0)
                if(strcmp(nm, anag[i].nome)==0)
                    if(et==anag[i].eta)
                        return(&anag[i]);
        }
        return(NULL);
    }
    
    void visper(struct per *p)
    {
        printf("\n\n---------------------\n");
        printf("\n\t\tCognome : %s", p->cognome);
        printf("n\t\tNome : %s", p->nome);
        printf("n\t\tIndirizzo : %s", p->indirizzo);
        printf("n\t\tEta : %d", p->eta);
        printf("\n\n----------------------\n");
    }
    
    void visAnagrafe(void)
    {
        int i;
        char pausa;
        struct per *ps= &anag[0];
        for(i=0; i<= index; i ++);
        {
            visper(ps++);
            scanf("%c", &pausa);
        }
    }
    
    //Fine della conversazione in chat
    
Devi accedere o registrarti per scrivere nel forum
11 risposte