Volevo scrivere un programma per l’inserimento e visualizzazione di un gruppo di automobili descritte da marca, modello e numero di unità vendute, con il gruppo di automobili inserito dall’utente del programma. Ho dunque scritto un menù che mi permette di scegliere tra visualizzare l'elenco o aggiungere un'auto. Tuttavia ,inserito l'azione di inserimento, il programma termina. Ecco il codice:
codice:
#include <stdio.h>

#define DIM 31
#define MAX 30
#define MENU 0
#define INS 1
#define VIS 2
#define OUT 100

int indice=0;

struct auto {
  char marca[DIM];
  char modello[DIM];
  int  vend;
};

struct auto auto[MAX];

int men_auto(void);
int ins_auto(int);
void vis_elenco(void); 
void vis_auto(struct auto *);

int main()
{
    int scelta = MENU;
    
while(scelta!=OUT) {
  switch(scelta) {
    case MENU:
      scelta = men_auto();
      if(scelta == MENU)
         scelta = OUT;
      break;
    case INS:
      indice = ins_auto(indice);
      scelta = MENU;
      break;
     case VIS:
      vis_elenco();
      scelta = MENU;
      break;}

  system("PAUSE");	
  return 0;
}
}

/* menù */
int men_auto(void)
{
int scelta;
char invio;
int true = 1;
while(true){
  printf("\n\n\n\t\t\t SALONE AUTO");
  printf("\n\n\n\t\t\t 1. Immissione auto");
  printf("\n\n\t\t\t 2. Visualizza elenco");
  printf("\n\n\t\t\t 0. Fine");
  printf("\n\n\n\t\t\t\t Scegliere una opzione: ");
  scanf("\n%d", &scelta);
  printf("\n\n\n\n\n\n\n\n\n");
  switch(scelta) {
    case 0: return (scelta);
    case 1: return (scelta);
    case 2: return (scelta);
    default:
      break;
  }
}
return 0;
}

/* Inserisce auto */
int ins_auto(int pos)
{
char invio;
if(pos>=MAX) {
  printf(" Non si possono inserire altre auto");
  scanf("%c", &invio);
  return(pos);
}

printf("\n\t\tINSERIMENTO AUTO");
printf("\n\t\t---------------\n\n");
printf("Marca: ");
gets(auto[pos].marca);
printf("\nModello : ");
gets(auto[pos].modello);
printf("\nNumero vendute : ");
scanf("%d", &auto[pos].vend);
scanf("%c", &invio);
pos++;
return(pos);
}

/* Visualizza elenco*/
void vis_auto(struct auto *p)
{
printf("\n\n--------------------\n");
printf("\n\t\tMarca: %s", p->marca);
printf("\n\t\tModello : %s", p->modello);
printf("\n\t\tNumero vendute : %d", p->vend);
printf("\n\n--------------------\n");
}

/* Visualizza elenco */
void vis_elenco(void)
{
int i; 
char pausa;
struct auto *ps = &auto[0];
for (i=0; i<indice; i++) {
  vis_auto(ps++);
  scanf("%c", &pausa);
}
}
Dov'è l'errore?