Para
la activación de indicadores se pueden utilizar
los métodos setf() y flags() de la clase ios.
Se comenzará viendo la primera de ellas.
Los
dos prototipos del método setf() son:
long
setf(long indic);
long setf(long indic, long mask);
El
valor de retorno de esta función es la configuración
anterior (interesa disponer de ella al hacer algún cambio
para poder volver a dicha configuración si se desea), e indic
es el long que contiene los indicadores. En el segundo
prototipo mask es uno de los tres indicadores
combinación de otros (adjustfield, basefield y floatfield).
Se
permite activar varios indicadores a la vez con el
operador lógico OR binario. Ejemplo:
cout.setf(ios::showpoint
| ios::fixed);
Es
necesario determinar el flujo afectado (cout)
y la clase en la que están definidos los indicadores
(ios). Para desactivar los indicadores
se utiliza la función unsetf() de modo similar
a setf().
El
segundo prototipo se debe utilizar para cambiar los indicadores
que son exclusivos, como por ejemplo:
cout.setf(ios::left,
ios::adjustfield);
que
lo que hace es desactivar los tres bits que tienen que ver con la
alineación y después activar el bit de alineación
por la izquierda. En la forma,
cout.setf(0,
ios::adjustfield);
pone
los tres bits de alineación a cero.
La
función flags() sin argumentos devuelve un
long con la configuración de todos los
indicadores. Su prototipo es:
long
flags();
Existe
otra definición de la función flags() cuyo
valor de retorno es un long con la
configuración anterior, que permite cambiar todos los indicadores
a la vez, pasando un long con la nueva configuración como
argumento:
long
flags(long indic);
donde
indic contiene una descripción completa de la nueva
configuración. El inconveniente de la función
flags() es que establece una nueva configuración
partiendo de cero, mientras que setf() simplemente
modifica la configuración anterior manteniendo todo lo que
no se ha cambiado explícitamente, por lo que debe ser considerada
como una opción más segura.
Se
presenta a continuación un ejemplo con todo lo citado hasta
ahora:
//
se mostrará el signo + para números positivos
cout.setf(ios::showpos);
// se mostrará el punto y no se utilizará notación
científica
cout.setf(ios::showpoint | ios::fixed);
cout << 100.0;
que
hace que se escriba por pantalla:
+100.000000
|