Título: Problema al leer cadena con espacios? Publicado por: 1mpuls0 en 1 Abril 2014, 18:55 pm C++ está a punto de volverme loco e.e tal vez es la costumbre a la simpleza de otros lenguajes para hacer las cosas.
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: 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) 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 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 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 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
Sugerencias, por favor, antes de que me vuelva loco Título: Re: Problema al leer cadena con espacios? Publicado por: amchacon en 1 Abril 2014, 19:06 pm Buenas, la solución correcta es:
Código El '\n' no hace falta porque ya es el delimitador por defecto. El problema de esto esque hagas: Código
El cin lee el número, pero se deja el salto de línea. Eso hace que el getline solo lea eso y acabe. La solución es descartar el salto de línea y seguir: Código
Título: Re: Problema al leer cadena con espacios? Publicado por: 1mpuls0 en 1 Abril 2014, 19:53 pm Gracias, ya intenté!
e.e no me sale, algo se repite infinidad de veces en la consola, como si fuera un ciclo infinito. Coloco mi código completo, tal vez hay algo más! Clase Persona Código
Clase Empleado Código
Main Código
Título: Re: Problema al leer cadena con espacios? Publicado por: rir3760 en 2 Abril 2014, 17:46 pm Ese comportamiento se debe a que, por alguna extraña razón, estas tratando de leer un entero justo después de indicar que se introduzca el nombre:
Código Elimina la sentencia indicada así como la declaración de esa variable. También debes cambiar el uso de goto por una sentencia de repetición do ... while. Un saludo Título: Re: Problema al leer cadena con espacios? Publicado por: 1mpuls0 en 2 Abril 2014, 17:54 pm Ese comportamiento se debe a que, por alguna extraña razón, estas tratando de leer un entero justo después de indicar que se introduzca el nombre: *¬* El cin lee el número, pero se deja el salto de línea. Eso hace que el getline solo lea eso y acabe. La solución es descartar el salto de línea y seguir: Código
También debes cambiar el uso de goto por una sentencia de repetición do ... while. El programa inicial estaba con un do-while pero no funcionaba (no recuerdo bien que hacía o que no hacía, creo que al querer mostrar los resultados justo después de insertarlos no lo hacía, incluso colocando pause) por eso busqué otra opción y encontré sobre el goto. Título: Re: Problema al leer cadena con espacios? Publicado por: amchacon en 2 Abril 2014, 18:06 pm Lo que se refiere esque en pantalla sale: "Introduzca el nombre", sin embargo en vez de leer el nombre lees un entero. Yo no te he dicho eso :huh:
Quita eso. Tú problema está en el primer cin: Código
Aquí lees un entero, de modo que deberías poner el cin.ignore despues: Código
Título: Re: Problema al leer cadena con espacios? Publicado por: 1mpuls0 en 2 Abril 2014, 18:23 pm :xD
Perdón eso había entendido. pensaba que era como un "truquito" :P Pero ya lo capto. Corrijo y comento el resultado Solucionado. Quedó así. Código
Gracias chicos! Título: Re: Problema al leer cadena con espacios? Publicado por: amchacon en 2 Abril 2014, 18:42 pm No no, pon el cin.ignore donde te lo he puesto.
Si lo dejas asi y despues en un futuro quitas lo de leer un entero. Ese cin.ignore no haria falta y no te vas q acordar de quitarlos todos. |