Título: Problema con cin.getline Publicado por: erest0r en 23 Agosto 2013, 02:10 am Hola de nuevo, mi nuevo problema es con la funcion que nombre en el titulo, y bueno el codigo es este:
Código: #include<iostream> Como podran ver, el programa funcionara mal si el usuario introduce una cadena mayor a 4, y queria saber si me podrian ayudar con una solucion a eso. Gracias Título: Re: Problema con cin.getline Publicado por: flony en 23 Agosto 2013, 05:56 am cambia el 5
Código: cin.getline(str1, 5,'\n'); Código: in.getline(str2, 5, '\n'); Código: char str1[5], str2[5]; una opcion es usar string que son por decirlo asi vectores dinamicos donde la longitud la pone el usuario no lo probe pero deberia ser mas o menos Código: #include<iostrem> Título: Re: Problema con cin.getline Publicado por: erest0r en 23 Agosto 2013, 06:12 am La primera solucion que propones no la veo muy satisfactoria, es facil agregar
Código: cin.getline(str1, 1000000000000,'\n'); pero se ve "anti-programador" tener eso asi xD. Me gustaria una especie de codigo que pueda manejar ese exceso de la cadena. Probare la segunda solucion. Título: Re: Problema con cin.getline Publicado por: flony en 23 Agosto 2013, 06:19 am la primer solucion es si queres un limite de palabras...ejemplo la contraseña es de 8 digitos
la segunda es si queres que el usuario escriba hasta cansarse :laugh: Título: Re: Problema con cin.getline Publicado por: erest0r en 23 Agosto 2013, 06:23 am Ok, pero la cuestion esta en que si el usuario no hace caso e introduce una cadena mayor al limite que le coloque, cómo haria para manejar esa situacion y no me de error.
Título: Re: Problema con cin.getline Publicado por: flony en 23 Agosto 2013, 06:29 am una opción es usa la segunda solución, recorrerla con un while y dentro del while un for y mandarle un mensaje si se pasa, diciendo jodete el exceso de palabras no vale....o mejor para no ofenderlo decirle...che son 8 dígitos nada mas
Título: Re: Problema con cin.getline Publicado por: erest0r en 23 Agosto 2013, 06:50 am Yo entiendo, aunque si tuvieses una forma de manejar la primera situacion me gustaria saber, como el gets(), que cuando le pasas por parametro el tamaño de la cadena y el usuario escribe de mas, la funcion solamente tomara hasta el maximo que le indicaste, aunque en este caso creo q hace lo mismo y cuando va al segundo cin.getline(), lo omite, y tampoco puedo hacer algo del tipo
Código: while(getchar() != '\n'); antes del segundo cin.getline(), por eso quisiera saber una forma de poder solucionarlo de la forma en que lo presente, y sino, bueno tendre que hacerlo de la forma en que dijiste. Título: Re: Problema con cin.getline Publicado por: rir3760 en 23 Agosto 2013, 17:58 pm Como ya te comentaron lo mejor es utilizar instancias de la clase string, con ellas los pasos son:
1) Lees la linea completa mediante string::getline. 2) Verificas su tamaño (función miembro size) y si es mayor que el permitido descartas el exceso mediante la función string::erase (http://www.cplusplus.com/reference/string/string/erase/). Por ejemplo: Código
Si por alguna razón debes utilizar arrays de caracteres para almacenar las lineas los pasos son: 1) Lees la linea mediante la función istream::get (http://www.cplusplus.com/reference/istream/istream/get/), su funcionamiento es idéntico a istream::getline pero con la diferencia que el carácter delimitador ('\n' a menos que se especifique otro) se queda en el bufer de la entrada estándar. 2) Descartas el resto de la linea (por lo menos el '\n') mediante la función istream::ignore (http://www.cplusplus.com/reference/istream/istream/ignore/?kw=istream%3A%3Aignore). Por ejemplo: Código
Un saludo Título: Re: Problema con cin.getline Publicado por: erest0r en 24 Agosto 2013, 03:33 am Muchas gracias, todas las soluciones fueron utiles, y la ultima del compañero rir3760 se acerca mas a lo que buscaba.
+1 |