¿Cómo descargo el buffer cin?

¿Cómo elimino el buffer cin en C ++?

    Posiblemente:

    std::cin.ignore(INT_MAX); 

    Esto se leería e ignoraría todo hasta EOF . (También puede proporcionar un segundo argumento que es el carácter que debe leerse hasta (por ejemplo: '\n' para ignorar una sola línea).

    Además: probablemente desee hacer un: std::cin.clear(); antes de esto también para restablecer el estado de la stream.

    Preferiría las restricciones de tamaño C ++ sobre las versiones C:

     // Ignore to the end of file cin.ignore(std::numeric_limits::max()) // Ignore to the end of line cin.ignore(std::numeric_limits::max(), '\n') 
     cin.clear(); fflush(stdin); 

    Esto fue lo único que funcionó para mí cuando leía desde la consola. En cualquier otro caso, leería indefinidamente debido a la falta de \ n, o algo permanecería en el búfer.

    EDIT: descubrí que la solución anterior empeoraba las cosas. ESTE sin embargo, funciona:

     cin.getline(temp, STRLEN); if (cin.fail()) { cin.clear(); cin.ignore(numeric_limits::max(), '\n'); } 

    He encontrado dos soluciones para esto.

    El primero, y el más simple, es usar std::getline() por ejemplo:

     std::getline(std::cin, yourString); 

    … que descartará la stream de entrada cuando llegue a una nueva línea. Lea más sobre esta función aquí .

    Otra opción que descarta directamente la transmisión es esta …

     #include  // Possibly some other code here cin.clear(); cin.ignore(numeric_limits::max(), '\n'); 

    ¡Buena suerte!

     int i; cout < < "Please enter an integer value: "; // cin >> i; leaves '\n' among possible other junk in the buffer. // '\n' also happens to be the default delim character for getline() below. cin >> i; if (cin.fail()) { cout < < "\ncin failed - substituting: i=1;\n\n"; i = 1; } cin.clear(); cin.ignore(INT_MAX,'\n'); cout << "The value you entered is: " << i << " and its double is " << i*2 << ".\n\n"; string myString; cout << "What's your full name? (spaces inclded) \n"; getline (cin, myString); cout << "\nHello '" << myString << "'.\n\n\n"; 

    Qué tal si:

     cin.ignore(cin.rdbuf()->in_avail()); 

    Yo prefiero:

     cin.clear(); fflush(stdin); 

    Hay un ejemplo en el que cin.ignore simplemente no lo corta, pero no puedo pensarlo en este momento. Fue hace un tiempo cuando necesitaba usarlo (con Mingw).

    Sin embargo, fflush (stdin) es un comportamiento indefinido de acuerdo con el estándar. fflush () solo está destinado a las transmisiones de salida. fflush (stdin) solo parece funcionar como se espera en Windows (con los comstackdores 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.

    Otra posible solución (manual) es

     cin.clear(); while (cin.get() != '\n') { continue; } 

    No puedo usar fflush o cin.flush () con CLion, así que esto fue útil.

    Lo siguiente debería funcionar:

     cin.flush(); 

    En algunos sistemas, no está disponible y luego puede usar:

     cin.ignore(INT_MAX); 
     #include  

    y luego usar la función

     __fpurge(stdin) 

    La manera más fácil:

     cin.seekg(0,ios::end); cin.clear(); 

    Simplemente coloca el puntero cin al final de la secuencia stdin y cin.clear () borra todos los indicadores de error, como el indicador EOF.

    cin.get() parece enjuagarlo automáticamente de manera bastante extraña (aunque probablemente no lo prefiera, ya que esto es confuso y probablemente temperamental).