Ecco il codice completo
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int controllo_spazi (char * str)
{
    int x=1;
    for (int i=0; i<str[i]; i++) {
        if (str[i]==' ')
            x=0;
    }
    return x;
}
char * elimina_spazi (char * str)
{
    int x=0, y=0, i;
    
    /* elimino il carattere "a capo" al termine della riga  */
    i = 0;
    while(str[i] != '\n') i++;
        str[i] = '\0';
    
    for (i=0; i<str[i]; i++) {
        if (str[i]==' ') {
            x=i;
            y=1;
            break;
        }
    }
    // codice che sposta le lettere
    if (y==1) {
        for (int i2=x; i2<str[i2]; i2++)
            str[i2]=str[i2+1];
    }
    
    return str;
}
int controllo_data (char * mese, char * giorno)
{
    int x=0;
    if (strcmp(mese, "gennaio")==0 || strcmp(mese, "marzo")==0 || strcmp(mese, "maggio")==0 || strcmp(mese, "luglio")==0 || strcmp(mese, "agosto")==0 || strcmp(mese, "ottobre")==0 || strcmp(mese, "dicembre")==0) {
        if (atoi(giorno)<=31 && atoi(giorno)>=1)
            x=1;
    } else if (strcmp(mese, "aprile")==0 || strcmp(mese, "giugno")==0 || strcmp(mese, "settembre")==0 || strcmp(mese, "novembre")==0) {
        if (atoi(giorno)<=30 && atoi(giorno)>=1)
            x=1;
    } else if (strcmp(mese, "febbraio")==0) {
        if (atoi(giorno)<=28 && atoi(giorno)>=1)
            x=1;
    }
    return x;
}
int main(int argc, const char * argv[])
{
    char cognome [30], cognome_cod[4], nome[30], nome_cod[5], anno[4], anno_cod[2], mese[10], mese_cod, giorno[3], sesso[2], conferma[2], luogo[30], luogo_cod[1024], codice[16], dispari[16], pari[16], carattere_controllo;
    int i2=0, giorno_int, val_pari=0, val_dispari=0, somma=0, resto=0;
    int i;
    
    printf("Inserire cognome: ");
    fgets(cognome, sizeof(cognome), stdin);
    strcpy(cognome, elimina_spazi(cognome));
    printf("Inserire nome: ");
    fgets(nome, sizeof(nome), stdin);
    strcpy(nome, elimina_spazi(nome));
    do
    {
    printf("Inserisci anno di nascita(aa): ");
    scanf("%s", anno);
    }
    //anno 1÷2014
    while (atoi(anno)<1 || atoi(anno)>2014 || strlen(anno)!=2);
    do
    {
        printf("Inserisci mese di nascita(lettere): ");
        scanf("%s", mese);
        do
        {
            printf("Inserisci sesso(m/f): ");
            scanf("%s", sesso);
        }
        while ((strcmp(sesso, "m")!=0) && (strcmp(sesso, "f")!=0));
        do
        {
            printf("Inserisci giorno di nascita(gg): ");
            scanf("%s", giorno);
        }
        while (atoi(giorno)<1 || atoi(giorno)>31 || strlen(giorno)==1);
    }
    while (controllo_data(mese, giorno) != 1);
    printf("Sei nato in Italia?(s/n): ");
    scanf("%s", conferma);
    
    //sviluppo calcoli per calcolare le lettere del cognome
    if (strlen(cognome)==2) {
        strcpy(cognome_cod,cognome);
        cognome_cod[2]='x';
    } else {
        for (i=0; i<strlen(cognome); i++) {
            if (cognome[i]!='a' && cognome[i]!='e' && cognome[i]!='i' && cognome[i]!='o' && cognome[i]!='u') {
                cognome_cod[i2]=cognome[i];
                i2++;
            }
            if (i2>2)
                break;
        }
        if (strlen(cognome_cod)<=2) {
            for (i=0; i<strlen(cognome); i++) {
                if (cognome[i]=='a' || cognome[i]=='e' || cognome[i]=='i' || cognome[i]=='o' || cognome[i]=='u') {
                    cognome_cod[2]=cognome[i];
                    break;
                }
            }
        }
    }
    
    //sviluppo calcoli per calcolare le lettere del nome
    i2=0;
    if (strlen(nome)==2) {
        strcpy(nome_cod,nome);
        nome_cod[2]='x';
    } else {
        for (i=0; i<strlen(nome); i++) {
            if (nome[i]!='a' && nome[i]!='e' && nome[i]!='i' && nome[i]!='o' && nome[i]!='u') {
                nome_cod[i2]=nome[i];
                i2++;
            }
            //spostare le lettere
            if (i2==4) {
                nome_cod[0]=nome_cod[0];
                for (i=1; i<4; i++) 
                    nome_cod[i]=nome_cod[i+1];
            }
            if (i2>3)
                break;
        }
        if (strlen(nome_cod)<=2) {
            for (i=0; i<strlen(nome); i++) {
                if (nome[i]=='a' || nome[i]=='e' || nome[i]=='i' || nome[i]=='o' || nome[i]=='u') {
                    nome_cod[2]=nome[i];
                    break;
                }
            }
        }
    }
    
    //sviluppo calcoli per l'anno di nascita
    if (strlen(anno)==2) {
        strcpy(anno_cod, anno);
    } else {
        printf("\nAnno scritto nella forma errata!");
        return 0;
    }
        
    //sviluppo calcoli per il mese di nascita
    if(strcmp(mese,"gennaio")==0)
        mese_cod='a';
    if(strcmp(mese,"febbraio")==0)
        mese_cod='b';
    if(strcmp(mese,"marzo")==0)
        mese_cod='c';
    if(strcmp(mese,"aprile")==0)
        mese_cod='d';
    if(strcmp(mese,"maggio")==0)
        mese_cod='e';
    if(strcmp(mese,"giugno")==0)
        mese_cod='h';
    if(strcmp(mese,"luglio")==0)
        mese_cod='l';
    if(strcmp(mese,"agosto")==0)
        mese_cod='m';
    if(strcmp(mese,"settembre")==0)
        mese_cod='p';
    if(strcmp(mese,"ottobre")==0)
        mese_cod='r';
    if(strcmp(mese,"novembre")==0)
        mese_cod='s';
    if(strcmp(mese,"dicembre")==0)
        mese_cod='t';
    
    //sviluppo calcoli per il giorno di nascita
    //sesso di nascita
    if (strncmp(sesso,"f",2)==0) {
        //convertire giorno da stringa a intero
        giorno_int=atoi(giorno);
        //sommare 40 a giorno
        giorno_int+=40;
        //convertire giorn_int da intero a stringa
        sprintf(giorno,"%d", giorno_int);
    }
    
    //sviluppo calcoli per il luogo
    if (strncmp(conferma, "s", 2)==0) {
        do
        {
        printf("Inserisci luogo di nascita (senza lasciare spazi): ");
        fgets(luogo, sizeof(luogo), stdin); //qui non funziona
        }
        while (controllo_spazi(luogo) != 1);
        FILE * f = fopen ("prova.txt" , "r");
        if ( !f ) return -1;
        
        char buffer [1024];
        
        int conta_righe, i;
        
        /* inizializzo il contatore */
        conta_righe = 0;
        
        while(fgets (buffer , 1024 , f) != NULL)
        {
            /* ho letto una riga: aumento il contatore */
            conta_righe++;
            
            /* elimino il carattere "a capo" al termine della riga  */
            i = 0;
            while(buffer[i] != '\n') i++;
                buffer[i] = '\0';
            
            /* confronto la stringa appena letta con il campione */
            if(strcmp(buffer, luogo) == 0)
                break;
        }
        
        fclose(f);
        
        FILE * pf = fopen ("codici.txt" , "r");
        if ( !pf ) return -1;
        
        char buffer1 [1024];
        
        int riga_da_leggere;
        
        /* voglio leggere la riga corretta */
        riga_da_leggere = conta_righe;
        
        /* inizializzo il contatore */
        i = 0;
        
        while(i != riga_da_leggere)
        {
            if(fgets (buffer1 , 1024 , pf) == NULL)
            {
                printf("Fine del file raggiunta.\n");
                return -1;
            }
            i++;
        }
        
        strcpy(luogo_cod, buffer1);
        fclose(pf);
    } else {
        //nato all'estero
        printf("Inserisci stato di nascita: ");
        scanf("%s", luogo);
        if (strcmp(luogo, "albania")==0)
            strcpy(luogo_cod,"z100");
        if (strcmp(luogo, "ucraina")==0)
            strcpy(luogo_cod,"z138");
        if (strcmp(luogo, "grecia")==0)
            strcpy(luogo_cod,"z115");
        if (strcmp(luogo, "polonia")==0)
            strcpy(luogo_cod,"z127");
    }
    
    //copiare i caratteri in una variabile codice fiscale
    i2=0;
    for (i=0; i<3; i++)
        codice[i]=cognome_cod[i];
    for (i=3; i<6; i++) {
        codice[i]=nome_cod[i2];
        i2++;
    }
    i2=0;
    for (i=6; i<8; i++) {
        codice[i]=anno_cod[i2];
        i2++;
    }
    codice[8]=mese_cod;
    i2=0;
    for (i=9; i<11; i++) {
        codice[i]=giorno[i2];
        i2++;
    }
    i2=0;
    for (i=11; i<15; i++) {
        codice[i]=luogo_cod[i2];
        i2++;
    }
    //codice per il carattere di controllo
    int i_dispari=0, i_pari=0;
    for (i=0; i<strlen(codice); i++) {
      //dividere i caratteri pari dai caratteri dispari
        if((i%2)==1) {
            //caratteri pari(parte dall'indice 0)
            pari[i_pari]=codice[i];
            i_pari++;
        } else {
            dispari[i_dispari]=codice[i];
            i_dispari++;
        }
    }
    //assegnare il valore ai caratteri pari
    for (i=0; i<strlen(pari); i++) {
        if (pari[i] >= '0' && pari[i] <= '9')
            val_pari += pari[i] - '0';
        
        if (pari[i] >= 'a' && pari[i] <= 'z')
            val_pari += pari[i] - 'a';
    }
    
    //assegnare il valore ai caratteri dispari
    for (int i=0; i<strlen(dispari); i++) {
        if (strncmp(&dispari[i], "0", 1)==0)
            val_dispari+=1;
        if (strncmp(&dispari[i], "1", 1)==0)
            val_dispari+=0;
        if (dispari[i] >= '2' && dispari[i] <= '4')
            val_dispari+=(dispari[i] - '0') + (dispari[i] - '0' + 1);
        if (dispari[i] >= '5' && dispari[i] <= '9')
            val_dispari+=(dispari[i] - '0') + (dispari[i] - '0' + 3);
        if (strncmp(&dispari[i], "a", 1)==0)
            val_dispari+=1;
        if (strncmp(&dispari[i], "b", 1)==0)
            val_dispari+=0;
        if (dispari[i] >= 'c' && dispari[i] <= 'e')
            val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' + 1);
        if (dispari[i] >= 'f' && dispari[i] <= 'j')
            val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' + 3);
        if (dispari[i] >= 'k' && dispari[i] <= 'l')
            val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 18);
        if (dispari[i] >= 'm' && dispari[i] <= 'n')
            val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 6);
        if (strncmp(&dispari[i], "o", 1)==0)
            val_dispari+=11;
        if (strncmp(&dispari[i], "p", 1)==0)
            val_dispari+=3;
        if (dispari[i] >= 'q' && dispari[i] <= 'r')
            val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 26);
        if (dispari[i] >= 's' && dispari[i] <= 'u')
            val_dispari+=(dispari[i] - 'a') + (dispari[i] - 'a' - 24 );
        if (strncmp(&dispari[i], "v", 1)==0)
            val_dispari+=10;
        if (strncmp(&dispari[i], "w", 1)==0)
            val_dispari+=22;
        if (strncmp(&dispari[i], "x", 1)==0)
            val_dispari+=25;
        if (strncmp(&dispari[i], "y", 1)==0)
            val_dispari+=24;
        if (strncmp(&dispari[i], "z", 1)==0)
            val_dispari+=23;
        if (strncmp(&dispari[i], "\0", 1)==0)
            val_dispari+=0;
    }
    
    //sommare i valori pari e i valori dispari
    somma=val_pari+val_dispari;
    //calcolare il resto dividendo per 26 il risultato
    resto=somma%26;
    
    //assegnare ad ogni valore da 0 a 25 il carattere corrispondente
    char a='a';
    for (i=0; i<=25; i++) {
        if (resto==i) 
            carattere_controllo=a;
        a++;
    }
    
    codice[15]=carattere_controllo;
    codice[16]='\0';
    
    //caratteri maiuscoli e stampa dell'output
    for (int i=0; i<codice[i]; i++) 
        codice[i]=toupper(codice[i]);
    
    printf("\n%s\n, codice);
    return 0;
}
Con questa funzione non funziona 
//sviluppo calcoli per il luogo
    if (strncmp(conferma, "s", 2)==0) {
        do
        {
        printf("Inserisci luogo di nascita (senza lasciare spazi): ");
        fgets(luogo, sizeof(luogo), stdin); //qui non funziona
        }
        while (controllo_spazi(luogo) != 1);
Se uso questa funzione non va
fgets(luogo, sizeof(luogo), stdin);
Se uso scanf va ma non la devo usare
        scanf("%s", luogo);
 Grazie