[C con Clase] Duda sobre cin.getline
Steven Davidson
srd4121 en njit.edu
Lun Abr 4 18:57:01 CEST 2011
Hola Pedro,
On 4/4/2011 9:35 AM, Pedro Osorio wrote:
> Despues de:
> cout<< "Ingresa tu opcion: ";
> cin>> opcion;
> Debes limpiar el buffer de entrada, pues el "intro" quedó almacenado
> allí. para limpiarlo debes añadir lo siguiente:
> cout<< "Ingresa tu opcion: ";
> cin>> opcion;
> cin.clear();
> fflush(stdin);
>
> Es una de las varias opciones que se ven por internet. Ma
> información acá:
> http://stackoverflow.com/questions/257091/how-do-i-flush-the-cin-buffer
>
Me temo que no estoy de acuerdo con esta forma. De hecho, en ese foro de
preguntas y respuestas, ésta tiene un -1. La razón es que se mezclan dos
formas diferentes de tratar el búfer del teclado: 'cin' que es de C++ y
'fflush()' que originalmente es de C. No es NADA recomendable mezclar
<iostream> con <cstdio>, porque es posible que no estén asociados. Es
decir, 'cin' puede funcionar independientemente de las funciones de
<cstdio> y viceversa.
En segundo lugar, 'fflush()' sirve exclusivamente para canales de
salida, dictada por su diseño en el estándar. Ahora bien, algunos
sistemas, como MS-Windows, extiende este comportamiento para aceptar el
canal de entrada estándar. Sin embargo, esto no es un comportamiento
estándar, por lo que no funcionará en todos los sistemas.
La recomendación es usar 'ignore()' o incluso comprobar antes si hay
caracteres en el búfer con: cin.rdbuf()->in_avail() El problema es que
'in_avail()' no siempre funciona correctamente bajo ciertos sistemas.
Espero haber aclarado un poco más este tema.
Steven
Más información sobre la lista de distribución Cconclase