¿Cómo borro el búfer cin en C ++?
c++
cin
io-buffering
Dana la cuerda
fuente
fuente
Preferiría las restricciones de tamaño de C ++ sobre las versiones de C:
fuente
cin
y uso la primera declaración anterior para vaciar elcin
búfer, sigue solicitando la entrada hasta que ingreseEOF
presionandoctrl+d
?Esto fue lo único que funcionó para mí al leer desde la consola. En cualquier otro caso, se leería indefinidamente debido a la falta de \ n, o quedaría algo en el búfer.
EDITAR: Descubrí que la solución anterior empeoró las cosas. ESTE sin embargo, funciona:
fuente
He encontrado dos soluciones para esto.
La primera, y la más sencilla, es utilizar,
std::getline()
por ejemplo:... que descartará el flujo de entrada cuando llegue a una nueva línea. Lea más sobre esta función aquí .
Otra opción que descarta directamente el stream es esta ...
¡Buena suerte!
fuente
fuente
Qué tal si:
fuente
Yo prefiero:
Hay un ejemplo en el que cin.ignore simplemente no funciona, pero no puedo pensar en ello en este momento. Fue hace un tiempo cuando necesitaba usarlo (con Mingw).
Sin embargo, fflush (stdin) es un comportamiento indefinido según el estándar. fflush () solo está diseñado para flujos de salida. fflush (stdin) solo parece funcionar como se esperaba en Windows (con compiladores GCC y MS al menos) como una extensión del estándar C .
Entonces, si lo usa, su código no será portátil.
Consulte Uso de fflush (stdin) .
Además, consulte http://ubuntuforums.org/showpost.php?s=9129c7bd6e5c8fd67eb332126b59b54c&p=452568&postcount=1 para obtener una alternativa.
fuente
Otra posible solución (manual) es
No puedo usar fflush o cin.flush () con CLion, por lo que esto fue útil.
fuente
La manera más fácil:
Simplemente coloca el puntero cin al final del flujo stdin y cin.clear () borra todos los indicadores de error, como el indicador EOF.
fuente
Lo siguiente debería funcionar:
En algunos sistemas no está disponible y luego puede usar:
fuente
flush
método es solo para salida y trata con caracteres ya escritos.basic_istream<char>' has no member named 'flush'
y luego usa la función
fuente
cin.get()
parece vaciarlo automáticamente de manera bastante extraña (probablemente no sea el preferido, ya que esto es confuso y probablemente temperamental).fuente
Funcionó para mí. He usado for loop con getline ().
fuente