scanf("%d",&opt)
opt=getch();
opt=getche();
opt=getchar();
por que lo digo???? porque cuando me muestra el menu no me respeta la opcion deseada o se la brinca o no hace nada
a ver si me echan una mano
este es mi codigo (parcial) solo necesito que me digan como le hago para que me valga las opciones con esa base del cogido qu.e tengo, no me gustaria cambiar mucho codigo, creo que no esta TAN TAN mal

Código:
#include<stdio.h>
#include<conio.h>
struct cliente {
char rfc[15];
char nom [30];
char dir[60];
char tel[11];
};
struct cliente c1;
struct maquinaria {
int num_maq;
char mod[15];
char desc [60];
char fecha_com [15];
char tipo[15];
};
struct maquinaria m1;
struct renta {
int num_rent;
char fecha_rent[15];
char period[20];
char rfc [15];
int num_maq;
float total_rent;
};
struct renta r1;
int opt,opt2;
void main (void)
{
do
{
clrscr();
printf("Bienvenido al sistema de registro\n\n");
printf("1.- Manejo de datos del cliente\n2.- Manejo de datos de la maquinaria\n3.- Control de rentas\n4.- Salida\n\nOpcion: ");
[color=red][b] scanf("%d",&opt);
switch(opt)[/b][/color]
case 1:
{
do
{
clrscr();
printf("MANEJO DE DATOS DEL CLIENTE\n\n");
printf("1.- Altas de clientes\n2.- Bajas de clientes\n3.- Cambio de datos de clientes\n4.- Consulta de todo los clientes\n5.- Regresar al menu principal\n\nOpcion: ");
[color=red][b]opt2=get();
switch(opt2)[/b][/color]
case 1:
{
clrscr();
printf("ALTA DE CLIENTES\n\n");
printf("RFC del cliente: ");
gets(c1.rfc);
printf("Nombre del cliente: ");
gets(c1.nom);
printf("Direccion: ");
gets(c1.dir);
printf("Telefono: ");
gets(c1.tel);
}
break;
case 2:
clrscr();
printf("BAJAS DE CLIENTES\n\n");
break;
case 3:
clrscr();
printf("CAMBIO DE DATOS DE CLIENTES");
break;
case 4:
clrscr();
printf("CONSULTA DE TODOS LOS CLIENTES");
break;
case 5:
clrscr();
break;
}
while(opt != 5) ;
}
break;
}
while (opt != 4);
getch();
}
#include<conio.h>
struct cliente {
char rfc[15];
char nom [30];
char dir[60];
char tel[11];
};
struct cliente c1;
struct maquinaria {
int num_maq;
char mod[15];
char desc [60];
char fecha_com [15];
char tipo[15];
};
struct maquinaria m1;
struct renta {
int num_rent;
char fecha_rent[15];
char period[20];
char rfc [15];
int num_maq;
float total_rent;
};
struct renta r1;
int opt,opt2;
void main (void)
{
do
{
clrscr();
printf("Bienvenido al sistema de registro\n\n");
printf("1.- Manejo de datos del cliente\n2.- Manejo de datos de la maquinaria\n3.- Control de rentas\n4.- Salida\n\nOpcion: ");
[color=red][b] scanf("%d",&opt);
switch(opt)[/b][/color]
case 1:
{
do
{
clrscr();
printf("MANEJO DE DATOS DEL CLIENTE\n\n");
printf("1.- Altas de clientes\n2.- Bajas de clientes\n3.- Cambio de datos de clientes\n4.- Consulta de todo los clientes\n5.- Regresar al menu principal\n\nOpcion: ");
[color=red][b]opt2=get();
switch(opt2)[/b][/color]
case 1:
{
clrscr();
printf("ALTA DE CLIENTES\n\n");
printf("RFC del cliente: ");
gets(c1.rfc);
printf("Nombre del cliente: ");
gets(c1.nom);
printf("Direccion: ");
gets(c1.dir);
printf("Telefono: ");
gets(c1.tel);
}
break;
case 2:
clrscr();
printf("BAJAS DE CLIENTES\n\n");
break;
case 3:
clrscr();
printf("CAMBIO DE DATOS DE CLIENTES");
break;
case 4:
clrscr();
printf("CONSULTA DE TODOS LOS CLIENTES");
break;
case 5:
clrscr();
break;
}
while(opt != 5) ;
}
break;
}
while (opt != 4);
getch();
}
que tengo mal???