PROBLEMA CON FUNZIONE FGETS

di il
5 risposte

PROBLEMA CON FUNZIONE FGETS

Salve a tutti,
ho un problema con un esercizio;Il programma dovrebbe gestire una lista concatenata di persone tramite puntatore a struttura.Il mio problema è che una volta compilato ed avviato il programma ho problemi con la funzione fgets come se non venisse letta l'istruzione.Questo non mi succede con la funzione scanf. Riporto il codice:
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

#define massimo 100

struct data{
    int giorno;
    char mese[massimo];
    int anno;
};

struct ind {
    char via[massimo];
    int numero;
    char interno[massimo];
    char citta[massimo];
    char prov[massimo];
};

struct persona {
    char nome[massimo];
    char cognome[massimo];
    struct data data_nasc;
    char comune_nasc[massimo];
    struct ind indirizzo;
    char telefono[massimo];
    char parentela[massimo];      //CF capofamiglia, CG coniuge ecc.
    struct persona *link;  // punta alla persona seguente 
};



struct persona* inser_persona(struct persona *l){
    if (l==NULL){
        l=(struct persona*)malloc(sizeof(struct persona));
        printf("1)Inserisci il nome:");
        scanf("%s",l->nome);
        printf("\nInserisci il cognome:");
        scanf("%s",l->cognome);
        printf("inserisci la data di nascita\n\tgiorno: ");
        scanf("%d", &l->data_nasc.giorno);
        printf("\n\tmese: ");
        scanf("%s",l->data_nasc.mese);
        printf("\n\tanno: ");
        scanf("%d", &l->data_nasc.anno);
        printf("\ninserisci il comune di nascita : ");
        scanf("%s",l->comune_nasc);
        printf("\ninserisci l'indirizzo :\n\tvia: ");
        fgets(l->indirizzo.via,massimo,stdin);
        printf("\n\tnumero civico : ");
        scanf("%d", &l->indirizzo.numero);
        printf("\n\t interno : ");
        scanf("%s",l->indirizzo.interno);
        printf("\n\tcitta' : ");
        scanf("%s",l->indirizzo.citta);
        printf("\n\tprovincia : ");
        fgets(l->indirizzo.prov,massimo,stdin);
        printf("\n\tparentela: ");
        fgets(l->parentela,massimo,stdin);
        printf("\n\tnumero di telefono: ");
        fgets(l->telefono,massimo,stdin);
        l->link=NULL;
        return l;
        }
        else{
            struct persona *nuovo=(struct persona*)malloc(sizeof(struct persona));
            printf("2)Inserisci il nome:");
            scanf("%s", nuovo->nome);
            printf("\nInserisci il cognome:");
            scanf("%s", nuovo->cognome);
            printf("inserisci la data di nascita\n\tgiorno: ");
            scanf("%d", &nuovo->data_nasc.giorno);
            printf("\n\tmese: ");
            scanf("%s", nuovo->data_nasc.mese);
            printf("\n\tanno: ");
            scanf("%d", &nuovo->data_nasc.anno);
            printf("\ninserisci il comune di nascita : ");
            scanf("%s", nuovo->comune_nasc);
            printf("\ninserisci l'indirizzo :\n\tvia: ");
            scanf("%s", nuovo->indirizzo.via);
            printf("\n\tnumero civico : ");
            scanf("%d", &nuovo->indirizzo.numero);
            printf("\n\t interno : ");
            scanf("%s", nuovo->indirizzo.interno);
            printf("\n\tcitta' : ");
            scanf("%s", nuovo->indirizzo.citta);
            printf("\n\tprovincia : ");
            scanf("%s", nuovo->indirizzo.prov);
            nuovo->link=l;
            return nuovo;
        }
}

void stampaLista(struct persona *l){
    if(l==NULL)
        printf("lista vuota\n");
        else{
            while(l!=NULL){
              printf("%s",l->nome);
              printf(" ");
              printf("%s",l->cognome);
                l=l->link;
            }
        }
}




int main(){
    int scelta=1;
    struct persona *anagraf;
    anagraf=NULL;
    
    while(scelta!=0){
        printf("\t\t\tANAGRAFE\nPremi:\n\t0 per uscire dal programma\n\t1 per inserire una persona\n\t2 per stampare la lista\n");
        scanf("%d", &scelta);
        if(scelta==1){
            anagraf=inser_persona(anagraf);
            
        }
        if(scelta==2)
            stampaLista(anagraf);
            
        printf("\n\n\n\n");
    
    }
    return 0;
	}
grazie in anticipo

5 Risposte

Devi accedere o registrarti per scrivere nel forum
5 risposte