Alguien me ayuda y me dice que falla en esta funcion??

jescrayl
25 de Diciembre del 2003
Pues eso, esta funcion deberia pedirme todos los datos tales como: codigo cliente, nombre, apellidos, direccion y telefono, pero cuando meto el codigo de cliente automaticamente el nombre me lo pone en blanco y me salta a la linea del apellido, que falla?
Gracias!!

struct BD_Clientes{

int cod_Cliente;
char nombre [10];
char apellidos [25];
char direccion [30];
char telefono [10];

}baseClientes;





struct BD_Clientes devuelveguardaCliente(){

int cod_Cliente;
char nombre [10];
char apellidos [25];
char direccion [30];
char telefono [10];
struct BD_Clientes cliente;

printf ("Introduce el codigo del cliente: ");
scanf ("%i",&cod_Cliente);// aqui esta el problema
printf ("nIntroduce su nombre: ");
gets(nombre);
printf ("nIntroduce su apellidos: ");
gets(apellidos);
printf ("nIntroduce su direccion: ");
gets(direccion);
printf ("nIntroduce su telefono: ");
gets(telefono);

//PROBLEMA: si usamos scanf se para en el primer espacio, y si
//usamos gets no deja meter el nombre, como si se saltase la
//sentencia gets(nombre)

printf ("nVas a guardar un cliente en la base de datos");

cliente.cod_Cliente=cod_Cliente;
strcpy (cliente.nombre, nombre);
strcpy (cliente.apellidos,apellidos);
strcpy (cliente.direccion,direccion);
strcpy (cliente.telefono,telefono);

printf ("nHas introducido los siguientes datos de un nuevo cliente:n");
printf ("Codigo: %d n",cliente.cod_Cliente );
printf ("Nombre: %s n",cliente.nombre);
printf ("Apellidos: %s n",cliente.apellidos);
printf ("Direccion: %s n",cliente.direccion);
printf ("Telefono: %s n",cliente.telefono);

return cliente;

}

Guillem
25 de Diciembre del 2003
Creo que el problema està en que el scanf coge el código pero el retorno de carro que introduces después se queda en el buffer. Cuando haces el gets éste se queda con el \"\\n\" y acaba sin haber leido nada. Prueba a vaciar el buffer de entrada antes de hacer el gets.