[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