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.