Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: david_tosc90 en 17 Abril 2014, 18:15 pm



Título: duda con buffer de cin
Publicado por: david_tosc90 en 17 Abril 2014, 18:15 pm
a ver si alguien me puede echar una mano con esto:

tengo un problema con la lectura de cadenas con la funcion getline(), al principio me pasaba que si habia un '\n' en el buffer de cin, me guardaba una cadena vacia, y puse un cin.ignore() antes para limpiar el buffer, pues bien, ahora el problema es que si el buffer no tiene nada, y ejecuta el ignore(), al coger la cadena con el getline(), se come el primer caracter, no lo guarda.

La solucion que se me ocurria era comprobar antes de hacer el ignore() si habia algo en el buffer o no, pero no se como se comprueba eso.

a ver si alguien sabe como, u otra forma de solucionar esto.

espero que se haya entendido bien mi problema.

un saludo.


Título: Re: duda con buffer de cin
Publicado por: rir3760 en 17 Abril 2014, 23:54 pm
Para conocer cual es el siguiente carácter en cin (sin extraerlo) puedes utilizar la función std::istream::peek (http://www.cplusplus.com/reference/istream/istream/peek/).

Sin embargo por lo que comentas el problema de raíz es el uso intercalado de getline y (al parecer) el operador ">>". Para solucionarlo debes buscar todas las instancias donde utilizas ">>" seguidas del uso de getline, es en medio de ellas que debes descartar el resto de la linea.

Aquí lo mejor que puedes hacer es publicar la versión mas corta posible de tu programa que compile y presente el problema. A partir de el ya podemos ayudarte.

Un saludo