duda con buffer de cin

Iniciado por david_tosc90, 17 Abril 2014, 18:15 PM

0 Miembros y 1 Visitante están viendo este tema.

david_tosc90

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.

rir3760

Para conocer cual es el siguiente carácter en cin (sin extraerlo) puedes utilizar la función std::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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language