ciao a tutti per fare un'esercizio di programmazione per l'esame di informatica 2 ho provato a fare una specie di anagrafe con menù.. il compilatore non mi da errori però quando vado ad eseguire il programma, mi fa immettere i dati degli utenti ma quando eseguo la ricerca e/o cancellazione di un utente, mi dice sempre "non presente in anagrafe".. potete dare uno sguardo al codice e dirmi dove sbaglio?!
grazie in anticipo
codice://Capitolo 14 - Esercizio 3 // Scrivere un programma che offra tramite menu le funzioni di inserimento, // ricerca e cancellazione di un archivio studenti //GESTIONE ANAGRAFICA #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 //Semplice struttura che modella una persona struct dat { int giorno; int mese; int anno; }; typedef struct dat Data; struct student { char cogStud[80]; char nomStud[80]; char indStud[80]; int eta; Data datNasc; }; //Vettore persone struct student anag[MAXELE]; //Numero elementi allocati nel vettore anag int index = 0; //funzioni esterne al main int menPer(void); int insPer(int); struct student * cerPer(char *, char *, int); void eliPer(struct student *); void canPer(void); void ricPer(void); void visPer(struct student *); void visAnagrafe(void); //Presenta il menu' e lancia la funzione scelta int main(void) { 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; } } } //Menu' int menPer(void) { int scelta; char invio; int vero = 1; while (vero) { printf("\n\n\n\n\n\n\n\n\n"); printf("\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. Visualizzazione Anagrafe"); printf("\n\n\n\t\t\t 0. Fine"); printf("\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"); switch (scelta) { case 0: case 1: case 2: case 3: case 4: return (scelta); break; default: break; } } return (0); } //Inserisce persona nell'anagrafe int insPer(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\t\t-------------------------------------------"); printf("\nCognome : "); gets(anag[pos].cogStud); printf("\nNome : "); gets(anag[pos].nomStud); printf("\nIndirizzo : "); gets(anag[pos].indStud); printf("\nEta' : "); scanf("%d", &anag[pos].eta); scanf("%c", &invio); pos++; return(pos); } //Cancella persona dall'anagrafe, se presente void canPer(void) { char pausa; char cognome[DIM], nome[DIM]; int eta; struct student *ps; printf("\n\t\tCANCELLA PERSONA"); printf("\n\t\t-------------------------------------"); printf("\nCognome : "); gets(cognome); printf("\nNome : "); gets(nome); printf("Eta' : "); scanf("%d", &eta); scanf("%c", &pausa); //Invoca ricerca persona ps = cerPer(cognome, nome, eta); if (ps == NULL) { printf("\nPersona non presente in anagrafe"); scanf("%c", &pausa); return; } //Invoca visualizza persona visPer(ps); printf("\nConfermi cancellazione? (S/N) : "); scanf("%c", &pausa); if (pausa == 'S' || pausa == 's') { eliPer(ps); return; } } //Elimina persona dall'anagrafe void eliPer(struct student *p) { strcpy(p->cogStud, ""); strcpy(p->nomStud, ""); strcpy(p->indStud, ""); p->eta = 0; } //Ricerca persona se presente nell'anagrafe void ricPer(void) { char pausa; char cognome[DIM], nome[DIM]; int eta; struct student *ps; printf("\n\t\tRICERCA PERSONA"); printf("\n\t\t-------------------------------------"); printf("\nCognome : "); gets(cognome); printf("\nNome : "); gets(nome); printf("Eta' : "); scanf("%d", &eta); scanf("%c", &pausa); //Invoca la funzione di ricerca sequenziale ps = cerPer(cognome, nome, eta); if (ps == NULL) { printf("\nPersona non presente in anagrafe"); scanf("%c", &pausa); return; } visPer(ps); scanf("%c", &pausa); } //Scansione sequenziale del vettore anag alla ricerca di una //persona che abbia determinati cognome, nome ed eta' struct student *cerPer(char *cg, char *nm, int et) { int i; for(i=0; i<=index; i++) { if (strcmp(cg, anag[i].cogStud) == 0) if (strcmp(nm, anag[i].nomStud) == 0) if ((et == anag[i].eta) == 0) return (&anag[i]); } return(NULL); } //Visualizza persona void visPer(struct student *p) { printf("\n\n-------------------------------------------------"); printf("\n\t\tCognome : %s", p->cogStud); printf("\n\t\tNome : %s", p->nomStud); printf("\n\t\tIndirizzo : %s", p->indStud); printf("\n\t\tEta' : %d", p->eta); printf("\n\n-------------------------------------------------"); } //Visualizza l'anagrafe completa void visAnagrafe(void) { int i; char pausa; struct student *ps = &anag[0]; for (i=0; i<index; i++) { visPer(ps++); scanf("%c", &pausa); } }

Rispondi quotando