Effettivamente mettendo la pulizia del buffer prima del ciclo for l'immissione torna a essere corretta.
Grazie.
P.S. Il listato completo è questo:
Codice PHP:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

struct veicolo{
        
int id;
        
struct veicolo *next;
};

typedef struct veicolo veicolo_t;

struct codapila{
       
int num;
       
veicolo_t *first;
};

typedef struct codapila coda_tpila_t;

void elimina_veicolo(veicolo_t *temp){
         
free(temp);
}

coda_t coda_new(){
       
coda_t result;
       
result.first NULL;
       
result.num 0;
       return 
result;
}

pila_t pila_new(){
       
pila_t result;
       
result.first NULL;
       
result.num 0;
       return 
result;
}

void crea_pila(int arrivopila_t *p){
           
veicolo_t *elem = (veicolo_t *)malloc(sizeofveicolo_t));
           
elem->id arrivo;
           
elem->next p->first;
           
p->first elem;
           
p->num++;
}



void crea_coda(int arrivocoda_t *c){
           
veicolo_t *elem = (veicolo_t *)malloc(sizeofveicolo_t));  
           
elem->id arrivo;
           
elem->next NULL;
      
           if(
c->num == 0){
             
c->first elem;
             }
           else{
             
veicolo_t *temp c->first;
             while(
temp->next != NULL){
                 
temp temp->next;
                  }
              
temp->next elem;
           }
           
c->num++;
}

veicolo_t *nuova_coda(coda_t *q){
            if(
q->num == 0){
              return (
0);
               }
             
veicolo_t *temp q->first;
             
q->first q->first->next;
             
q->num--;
             return 
temp;
}

veicolo_t *nuova_pila(pila_t *r){
            if(
r->num == 0){
              return (
0);
               }
             
veicolo_t *resultr->first;
             
r->first r->first->next;
             
r->num--;
             return 
result;
}

void stampa_coda(coda_t *cq){
         if(
cq->num == 0){
            
printf("La coda è vuota ");
             }
         else{
            
veicolo_t *temp cq->first;
            
printf("{ ");
            while(
temp != NULL){
                   
printf("%d"temp->id);
                   
temp temp->next;
                    }
            
printf(" }");
          }
}

void stampa_pila(pila_t *pr){
         if(
pr->num == 0){
            
printf("La pila è vuota ");
             }
         else{
            
veicolo_t *temp pr->first;
            
printf("{ ");
            while(
temp != NULL){
                   
printf("%d"temp->id);
                   
temp temp->next;
                    }
            
printf(" }\n");
          }
}

struct traghetto{
         
coda_t camion;
         
pila_t automobili;
};

typedef struct traghetto traghetto_t;

traghetto_t trag_new(){
        
traghetto_t result;
        
result.camion coda_new();
        
result.automobili pila_new();
        return 
result;
}

void crea_trag(char typeint idtraghetto_t *t){
            switch(
tolower(type)){
              case 
'c':
                   
crea_coda(id, &t->camion);
                   break;
              case 
'a':
                   
crea_pila(id, &t->automobili);
                   break;
             }
}

veicolo_ttraghetto_next(traghetto_t *serv){
            if(
serv->camion.num 0){
                return (
nuova_coda(&serv->camion));
                }
                   
            if(
serv->automobili.num 0){
                return (
nuova_pila(&serv->automobili));
                }
             return 
NULL;
}

void stampa_traghetto(traghetto_t *tr){
             
printf("-> Camion: "); stampa_coda(&tr->camion);
             
printf("\n-> Automobili: "); stampa_pila(&tr->automobili);                  
             
printf("\n");
}

int main()
{
    
traghetto_t serv trag_new();
    
char type;
    
int inarrivonum;
    
veicolo_t *temp;
   
    
printf("quanti veicoli vuoi immettere? ");
    
scanf("%d", &n);
    
    
num 0;
      
    for(
i=0i<ni++){
        
        
printf("immetti carattere :");
        while(!
getchar()) ;
    
scanf("%c", &type); 
    
printf("\n");
    
crea_trag(type, ++num, &serv);
       }
     

     
printf("Stato del traghetto:\n ");
     
stampa_traghetto(&serv);
     
temp traghetto_next(&serv);

     while(
temp != NULL){
          
printf("Sbarco: %d\n"temp->id);
          
elimina_veicolo(temp);
          
printf("Stato del traghetto:\n ");
          
stampa_traghetto(&serv);
          
temp traghetto_next(&serv);
      }
 return 
1;