Problema nell'esecuzione anagrafe

di il
1 risposte

Problema nell'esecuzione anagrafe

Ciao a tutti, eccomi ancora qua, stò continuando ad imparare a "programmare"(permettetemi la parola, anche se sono agli albori, ma fà molto figo!!!). CERTO CHE LE SCLERATE FANNO PARTE DEL PROGRAMMATORE, NEVVERO???

A questo giro mi sono imbattuto in programma di anagrafe, ovvero ho la possibilità di inserire un n. prefissato di persone, cancellarle dall'elenco e ricercare UNA data persona nell'elenco o addirittura visionare tutta l'anagrafe.

Ok. Il fatto, è che all'atto dell'esecuzione, se inserisco una persona da ricercare nell'elenco delle persone da me inserite manualmente, il programma va in blocco, non fa niente, è probabile che la funzione creata per la ricerca faccia si che mandi in loop il tutto e quindi un'ipotesi.... Ma ancora non ne sono convinto

Sono qua....mi rimetto alla clemenza della corte!!!

C'è qualcuno che mi riesce a dare una dritta????


#include<stdio.h>   
#include<stdlib.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

/*STRUTTURA CHE MODELLA UNA PERSONA*/

struct per{
       
       char cognome[DIM];
       char nome[DIM];
       char ind[DIM];
       int eta;
       
       };
       
/* VETTORE PERSONE*/

 struct per anag[MAXELE]; 

  

/* NUMERO DI ELEMENTI ALLOCATI NEL VETTORE ANAG*/

int index=0;


int men_per(void);
int ins_per(int);
struct per *cer_per(char*,char*,int);
void eli_per(struct per *);
void can_per(void);
void ric_per(void);
void vis_per(struct per *);
void vis_anagrafe (void);

/*PRESENTA IL MENU' E LANCIA LA FUNZIONE SCELTA*/

void main()  /* è possibile che il void davanti al main sia opzionale*/

{
     int scelta=MENU;
     while(scelta!=OUT){
                        switch(scelta){
                                       case MENU:
                                            scelta = men_per();
                                            if(scelta==MENU)
                                            scelta=OUT;
                                            break;
                                       case INS:
                                            index=ins_per(index);
                                            scelta=MENU;
                                            break;
                                       case CAN:
                                            can_per();
                                            scelta=MENU;
                                            break;
                                       case RIC:
                                            ric_per();
                                            scelta=MENU;
                                            break;
                                       case VIS:
                                            vis_anagrafe();
                                            scelta=MENU;
                                            break;
                                       }
                                       }
                        system("pause");
                        }
                        
/* Menù di selezione*/

int men_per(void)
{
    int scelta;
    char invio;
    int true=1;
    while(true){
                printf("\n\n\n\n\n\\n\n\n\n\n\n\n\n");
                printf("\t\t\t\t ANAGRAFE");
                printf("\n\n\n\t\t\t 1. Immissione Persona: ");
                printf("\n\n\n\t\t\t 2. Cancellazione Persona: ");
                printf("\n\n\n\t\t\t 3. Ricerca Persona: ");
                printf("\n\n\n\t\t\t 4. Visualizza Anagrafe: ");
                printf("\n\n\n\t\t\t 0. Fine");
                printf("\n\n\n\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");
                switch(scelta) {
                               case 0:
                               case 1:
                               case 2:
                               case 3:
                               case 4:
                                    return (scelta);
                                    default:
                                            break;
                               }
                }
                return(0);  
    }
    
/* INSERISCE PERSONA NELL'ANAGRAFE*/

int ins_per(int pos)
{
    char invio;
    if(pos>=MAXELE) {
                    printf("Non si possono inserire altri nomi.");
                    scanf("%c",&invio);
                    return(pos);
                    }
    printf("\n\t\tINSERIMENTO PERSONA");
    printf("\n Cognome: ");
    gets(anag[pos].cognome);
    printf("\n Nome:");
    gets(anag[pos].nome);
    printf("\n Indirizzo:");
    gets(anag[pos].ind);
    printf("\n Età :");
    scanf("%d",&anag[pos].eta);
    scanf("%c",&invio);
    pos++;
    return(pos);
}

/* cancella persona dall'anagrafe se presente*/

void can_per (void)
{
     char pausa;
     char cognome[DIM],nome[DIM];
     int eta;
     struct per *ps;
     
     printf("\n\n\n\\t\t\t CANCELLA PERSONA");
     printf("\n\n-----\t\t");
     printf("\nCognome: ");
     gets(cognome);
     printf("\nNome: ");
     gets(nome);
     printf("\n Età: ");
     scanf("%d",&eta);
     scanf("%d",&pausa);
     
     /*invoca la ricerca della persona*/
     
     ps=cer_per(cognome,nome,eta);
     if(ps==NULL){
     printf("Persona non presente in anagrafe");
     scanf("%c",&pausa);
     return;    
     }
     /*invoca la visualizzazione della persona*/
     
     vis_per(ps);
     printf("\n Confermi Cancellazione? (s/n) ");
     scanf("%c",&pausa);
     if(pausa=='S'||pausa=='s') {
                                eli_per(ps);
                                return;
                                }
     }
     
     
/* elimina la persona se presente nell'anagrafe*/

void eli_per(struct per *p)
{
     strcpy(p->cognome, "");
     strcpy(p->nome, "");
     strcpy(p->ind, "");
     p->eta=0;
     }
     
     /*scansione sequenziale del vettore anag alla ricerca di una persona
 che abbia determinati cognome nome ed età */
 
 struct per *cer_per(char *cg,char *nm, int et)
 {
        int i=0;
        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);
        }
     
/*ricerca persona se presente nell'anagrafe*/

void ric_per(void)

{
     char pausa;
     char cognome[DIM],nome[DIM];
     int eta;
     struct per *ps;
     
     /*inserimento dati persona da ricercare*/
     
     printf("\n\n\n\\t\t\t RICERCA PERSONA");
     printf("\n\n-----\t\t\n");
     printf("\nCognome: ");
     gets(cognome);
     printf("\nNome: ");
     gets(nome);
     printf("\n Età: ");
     scanf("%d",&eta);
     scanf("%d",&pausa);
     
     /*INVOCA LA FUNZIONE DI SCANSIONE SEQUENZIALE*/
     
     ps=cer_per(cognome,nome,eta);
     if(ps==NULL) {
                  printf("\n Persona non presnte in anagrafe ");
                  scanf("%c",&pausa);
                  return;
                  }
     vis_per(ps);
     scanf("%c",&pausa);
}


        
 /*visualizza persona*/
 
 void vis_per(struct per *p)
 {
      printf("\n\n\n--------------\n");
      printf("\n\n\tCognome:  %s",p->cognome);
      printf("\n\n\tnome:  %s",p->nome);
      printf("\n\n\tEtà:  %d",p->eta);
      printf("\n\n\n--------------\n");
      
      }
      
 /*visualizza anagrafe completa*/
 
 void vis_anagrafe(void)
 {
      int i;
      char pausa;
      struct per *ps=&anag[0];
      for(i=0;i<=index;i++){
                            vis_per(ps++);
                            scanf("%c",&pausa);
                            }
 }

1 Risposte

  • Re: Problema nell'esecuzione anagrafe

    Ragazzi ho risolto da solo!!!!!!


    In pratica quando invocavo le funzioni di ricerca e di visualizzazione non mi ero accorto che :

    scanf("%d",&pausa);

    ma pausa era dichiarato come char e non come intero, pertanto credo che fosse per questo che il sistema si impallava.


    ORA PERO' HO UN'ALTRA DOMANDA, PERCHE' ALL'ATTO DELLA COMPILAZIONE NON MI E' STATO NOTIFICATO IL PROBLEMA?????
Devi accedere o registrarti per scrivere nel forum
1 risposte