Saltar al contenido

Usando getline() en C++

Revisamos profundamente cada una de las reseñas en nuestro espacio con el objetivo de enseñarte en todo momento información con la mayor veracidad y actualizada.

Solución:

si estás usando getline() después cin >> something, debe eliminar el carácter de nueva línea del búfer en el medio. Puedes hacerlo usando cin.ignore().

Sería algo como esto:

string messageVar;
cout << "Type your message: ";
cin.ignore(); 
getline(cin, messageVar);

Esto sucede porque el >> el operador deja una nueva línea n carácter en el búfer de entrada. Esto puede convertirse en un problema cuando realiza una entrada sin formato, como getline(), que lee la entrada hasta que se encuentra un carácter de nueva línea. Esto sucede, dejará de leer inmediatamente, debido a eso n que quedó colgado ahí en tu operación anterior.

Si solo tiene una nueva línea en la entrada, simplemente haciendo

std::cin.ignore();

funcionará bien. Lee y descarta el siguiente carácter de la entrada.

Pero si aún tiene algo más en la entrada, además de la nueva línea (por ejemplo, leyó una palabra pero el usuario ingresó dos palabras), entonces debe hacer

std::cin.ignore(std::numeric_limits::max(), 'n');

Véase, por ejemplo, esta referencia de la ignore función.

Para estar aún más seguro, haz la segunda alternativa anterior en un bucle hasta que gcount devuelve cero.

Tuve problemas similares. El único inconveniente es que con cin.ignore()tienes que presionar enter 1 vez más, lo que interfiere con el programa.

Te mostramos las reseñas y valoraciones de los lectores

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *