Toto marchaba casi bien en mi primer programa pero hay una parte en donde solicito el nombre del empleado, pues bien se me ocurrio colocar los apellidos y enseguida debería pedir el sexo pero se saltó esa solicitud (por consola).
Código:
Elige una opcion:
1 Registrar Empleado
2 Mostrar Empleados
3 Registrar Directivo
4 Registrar Cliente
5 Mostrar Clientes
9 Salir
1
Escribe el nombre de la empresa
hsbc
Escribe el nombre del empleado
1mpuls0
Escribe el sexo del empleado <-se salta esta petición
Escribe la edad del empleado
Estuve investigando y al parecer la solución es usar char nombre[50];
Pero también encontré otras supuestas soluciones
Primero leí aquí
:https://foro.elhacker.net/programacion_cc/problema_al_leer_cadenas_con_espacios_c-t328160.0.html
Lo que se propone ahí es hacer un do-while hasta que el código del medicamento sea menor que 7. Supongo que el usuario de ese problema dejaba espacios entre el código del producto.
Bien eso no me sirve.
Intenté como menciona ahí
Código
y aunque dejó de saltarse la petición del sexo, no muestra el nombre del empleado (en mi programa)
while(getchar()!='\n');
Después leí aquí
:http://www.forosdelweb.com/f14/leer-cadena-caracteres-por-teclado-c-279157/
<off> por cierto creo que ese Eternal Idol es el mismo de este foro </off>
Especificamente intenté con esta parte.
Código
Cabe resaltar que ademas del getline una linea antes utilizo cin, porque si no lo hago se salta prácticamente 2 peticiones xD
getline(cin, empleado, '\n');
Pero tuve el mismo resultado que el anterior (solo muestra una parte del nombre del empleado)
Citar
Elige una opcion:
1 Registrar Empleado
2 Mostrar Empleados
3 Registrar Directivo
4 Registrar Cliente
5 Mostrar Clientes
9 Salir
1
Escribe el nombre de la empresa
hsbc
Escribe el nombre del empleado
1mpuls0 <- problema
Escribe el sexo del empleado
hombre
Escribe la edad del empleado
25
Escribe el sueldo del empleado
12000
Elige una opcion:
1 Registrar Empleado
2 Mostrar Empleados
3 Registrar Directivo
4 Registrar Cliente
5 Mostrar Clientes
9 Salir
2
Empleado: hsbc, schneider, 25, hombre, 12000 <-Resultado, falta el nombre del empleado
1 Registrar Empleado
2 Mostrar Empleados
3 Registrar Directivo
4 Registrar Cliente
5 Mostrar Clientes
9 Salir
1
Escribe el nombre de la empresa
hsbc
Escribe el nombre del empleado
1mpuls0 <- problema
Escribe el sexo del empleado
hombre
Escribe la edad del empleado
25
Escribe el sueldo del empleado
12000
Elige una opcion:
1 Registrar Empleado
2 Mostrar Empleados
3 Registrar Directivo
4 Registrar Cliente
5 Mostrar Clientes
9 Salir
2
Empleado: hsbc, schneider, 25, hombre, 12000 <-Resultado, falta el nombre del empleado
Aquí también leí.
:http://elrincondelc.com/nuevorincon/foros/viewtopic.php?t=6353&sid=639bfc3e0941ebb5ed03439ede6da401
y el resultado fue el mismo que el anterior.
Ahí mencionan algo sobre cin.
Citar
cin usa como delimitador el espacio. La solucion es la funcion global getline
La solución que posiblemente sea es usar char, pero tendría que modificar el tipo de dato a practicamente todas mis variables xD
:http://ejercicioscpp.blogspot.mx/2013/07/c-leer-caracteres-cadenas-de-caracteres.html
Esta aun no la he implementado. Pero me gustaría escuchar alguna posible solución al utilizar tipo de dato string
Citar
El operador >> sobre cin no es útil para leer cadenas de caracteres que contengan espacios en blanco.
Por ejemplo, para leer en un programa el nombre y apellidos de una persona, si utilizamos las siguientes instrucciones:
char nombre[50]; // cadena de caracteres de longitud máxima 50
Por ejemplo, para leer en un programa el nombre y apellidos de una persona, si utilizamos las siguientes instrucciones:
char nombre[50]; // cadena de caracteres de longitud máxima 50
Mi código lo tengo de la siguiente forma. No creo que sea conveniente colocarlo todo. Pero si me lo piden lo coloco.
Código
//objetos de clases Empresa miEmpresa; Empleado miEmpleado; //variables string nombreEmpresa; string nombreEmpleado; //Variable en cuestion string sexoEmpleado; int edadEmpleado; float sueldoEmpleado; string categoriaEmpleado; cout << "Escribe el nombre del empleado" << endl; cin>>nombreEmpleado; //while(getchar()!='\n'); <- Al usarlo con cin obtiene solo la primera parte del nombre //getline(cin,nombreEmpleado,'\n'); // Al usarlo sin cin se salta a la siguiente peticion, al usarlo con cin obtiene la segunda parte miEmpleado.EstablecerNombre(nombreEmpleado);
Sugerencias, por favor, antes de que me vuelva loco