[C con Clase] Lo + básico

Steven Davidson srd4121 en njit.edu
Mar Mar 31 18:18:29 CEST 2009


Hola Vicente,

vicente lozano wrote:
> No sabia que fflush para in no era standard, hay alguna funcion que
> haga eso en el standard?
> 

Como ha mencionado José Álvaro, tienes que extraer los caracteres 
restantes del canal de entrada. Puedes usar 'fgets()' o puedes ir 
carácter por carácter con 'getchar()' hasta leer EOF. Por ejemplo,

while( getchar() != EOF );

Otra solución es establecer tu propio búfer y modo de almacenamiento a 
través de 'setvbuf()' para cualesquier canales de entrada, salida, o ambos.

En C++, podemos manipular el búfer del canal de entrada de la clase 
'istream' de tal manera que podemos ignorar una cantidad de caracteres 
invocando 'ignore()'. Por ejemplo,

cin.ignore( 1024 );

Para que esto funcione, necesitas desasociar las bibliotecas de ANSI C 
de "stdio" con las de ANSI C++. Esto lo hacemos a través de la función 
'sync_with_stdio()'. Esto es,

ios::sync_with_stdio( false );

cin.ignore( 1024 );

También puedes averiguar la cantidad de caracteres disponibles en el 
búfer de entrada para usar la cantidad exacta de caracteres en tal canal 
de entrada. Por ejemplo,

cin.ignore( cin.rdbuf()->in_avail(), '\n' );


Espero haber aclarado el tema.

Steven





Más información sobre la lista de distribución Cconclase