Bueno, entonces, la solución que he descubierto (yo no la conocía) es usar el método std::istream::sync. Lo que hace este método es sincronizar el búfer interno en el que se almacenan esos datos de pasos anteriores con la toma de datos actual. Entonces, lo que habría que hacer es colocar ese método antes de cualquier toma de datos:
Código
#include <iostream> int main() { // Aquí llenaremos el búfer de datos innecesarios para demostrar el uso de std::cin.sync std::cout << "Introduzca datos: "; std::cin.get(); // ... Código std::cout << "Introduzca datos de nuevo: "; std::cin.sync(); // Pedimos un carácter y lo imprimimos: std::cout << (char)std::cin.get(); return 0; }
Este código tendría la siguiente salida (en este ejemplo):
Código:
Introduzca datos: aaaaaaaaaaaaaaaaa
Introduzca datos de nuevo: r
r
Como ven, a pesar de haber llenado el búfer con el carácter 'a', se ha impreso el último carácter leído. Eso demuestra que funciona. Lo que no me queda del todo claro es cómo funciona este método, así que quizás sea ineficiente o algo por el estilo.
Sabiendo esto, ¿alguien sabe si usar todo el rato std::istream::sync tiene algún inconveniente? Gracias!