//*********************************************************
// manipu04.cpp
//*********************************************************
#include <iostream.h> // para operaciones de E/S
#include <iomanip.h> // define diferentes manipuladores
int main()
{
int i;
double variable1=22, variable2=7;
for(i=0; i<15; i++)
{
cout << setprecision(i);
cout << variable1/variable2 << endl;
}
return 0;
}
|
Ya habrá
notado que los flujos de E/S tienen ciertos valores predefinidos y que
éstos valores se pueden modificar utilizando manipuladores como oct y hex, sucede que los flujos de E/S tienen un campo para especificar los valores correspondientes y éstos campos se llaman banderas (flags). El archivo de cabecera ios.h define diferentes especificaciones de banderas. Mediante el uso del manipulador setiosflags()
nuestros programas pueden manipular muchas de éstas banderas utilizando
a su vez el operador de alcance, identificado por un par de símbolos de
dos puntos (::) y que nos sirve para acceder a una variable de
alcance global ó a los miembros de una clase. Recuerde que en la
siguiente lección daremos la definición de una clase y demostraremos
detalladamente el uso del operador de alcance, por lo pronto es
importante que conserve en mente los datos previos de ésta lección pues
serán aplicados prácticamente en todo programa que escriba en C++. En una determinada sección del archivo de cabecera ios.h podemos encontrar las definiciones para las diferentes banderas como un tipo de dato enum, generalmente de la siguiente manera:
enum
{
skipws = 0x0001, // Salta espacios en blanco durante la entrada
left = 0x0002, // justifica a la izquierda
right = 0x0004, // justifica a la derecha
internal = 0x0008, // relleno después de signo ó indicador de base
dec = 0x0010, // base decimal
oct = 0x0020, // base octal
hex = 0x0040, // base hexadecimal
showbase = 0x0080, // muestra indicador de base durante la salida
showpoint = 0x0100, // punto decimal obligatorio en float
uppercase = 0x0200, // salida hex en mayúsculas
showpos = 0x0400, // signo positivo obligatorio
scientific = 0x0800, // notación de tipo 3.145363E23
fixed = 0x1000, // dígitos decimales predeterminados
unitbuf = 0x2000, // desaloja flujos después de inserción
stdio = 0x4000 // desaloja stdout, stderr después de inserción
};
|
Puede
identificar fácilmente algunos de los manipuladores que ya hemos
estudiado y ahora veremos cómo se utilizan éstas banderas mediante el
manipulador setiosflags() y cómo restituimos las condiciones originales mediante el manipulaodr resetiosflags(), estudie y compile el siguiente ejemplo, manipu05.cpp,
además experimente con las banderas no incluidas en el programa, estoy
seguro que no presentará problema alguno comprender el uso de las
diferentes banderas.
//***********************************************
// manipu05.cpp
//***********************************************
#include <iostream.h>
#include <iomanip.h>
int main()
{
int numero;
cout << "Introduzca un numero:\n";
cin >> numero;
cout << "El valor introducido en base 10 es: " << numero
<< endl;
cout << setiosflags(ios::oct);
cout << "en base octal es: " << numero << endl;
cout << setiosflags(ios::hex);
cout << "y en base hexadecimal es: " << numero << endl;
cout << setiosflags(ios::uppercase|ios::showbase);
cout << "utilizando los manipuladores uppercase y showbase"
" el valor es: " << numero << endl;
cout << resetiosflags(ios::hex);
cout << "Ahora el valor se representa en base octal asi: "
<< numero << endl;
cout << resetiosflags(ios::uppercase|ios::showbase|ios::oct);
cout << setiosflags(ios::showpos|ios::showpoint|ios::fixed);
cout << "Ahora el valor es: " << (float)numero << endl;
cout << resetiosflags(ios::showpos|ios::showpoint|
ios::fixed);
cout << "El valor es " << numero << endl;
return 0;
}
|
El programa manipu05.cpp
empieza solicitándole un número el cual es desplegado inmediatamente
para demostrar los ajustes predeterminados para los flujos de E/S,
después se utiliza la bandera oct para representar el valor introducido en base octal, luego de mostrar el valor en pantalla se vuelve a utilizar la bandera hex
ésta vez para mostrar el número introducido en base hexadecimal. En
ésta parte del programa, línea 19, es conveniente hacer notar que hemos
modificado dos veces la representación que deseamos darle a los flujos
de E/S, en éste orden, primero indicamos que deseamos la base octal y
posteriormente la base hexadecimal, si después de la línea 19
utilizamos el manipulador setiosflags(ios::oct) la
representación de los flujos de E/S no será en base octal sino en
hexadecimal, entonces, si deseamos nuevamente la representación del
valor numérico introducido en base octal necesitamos reestablecer la
bandera oct anteriormente establecida en la línea 15, para esto utilizamos el manipulador resetiosflags()
como está ilustrado en la línea 23 y posteriormente en las líneas 26 y
29 del programa. Cuando sea necesario especificar varias banderas
podemos hacer uso del operador OR tanto con el manipulador setiosflags() como con resetiosflags() tal y como se puede apreciar en las líneas 20, 26, 27 y 30 del programa.
No response to “C++: El archivo iomanip.h III”
Publicar un comentario