[C con Clase] (sin asunto)

Steven Davidson srd4121 en njit.edu
Vie Mayo 16 05:52:02 CEST 2008


Hola David y Yolmer,

David Reza wrote:
> Yo también lo encuentro poco elegante pero es la única forma que me  
> sé.
> 
> En cuanto aprenda a utilizar una forma correcta o más elegante estoy  
> seguro que dejaré de utilizar ése método.
> 

La función miembro 'get()' recoge y extrae el siguiente carácter en el 
canal de entrada. En el código de Luchito, necesitamos extraer el 
carácter '\n' debido a la cadena entrante que representa un número; esto es,

cout<<"ingrese fac2  ";   cin>>m;

El carácter '\n' queda en el búfer y por tanto tenemos que eliminarlo. 
Esto se puede hacer fácilmente con 'get()'.

Podéis usar otro método que es la función miembro 'ignore()'. Por 
defecto, ignora y extrae 1 solo carácter, pero podemos indicar la 
cantidad si queremos. Esto es,

cin.ignore( 100 );  // Ignora los 100 primeros caracteres en el canal


Una función auxiliar es consultar la cantidad de caracteres en el canal 
a través de la función miembro 'in_avail()' de la clase 'streambuf'. Los 
canales internamente tienen un objeto polimórfico de la jerarquía 
'streambuf'. Podemos acceder a tal objeto a través de la funcidn miembro 
'rdbuf()'. Al final, haríamos lo siguiente:

ios::streamsize nCant = cin.rdbuf->in_avail();
if( nCant > 0 )
   cout << "Existen " << nCant << " caracteres en el canal\n";
else
   cout << "El canal está vacío.\n";


Espero que esto aclare el tema.

Steven






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