Banderas de I/O
En esta sección abordaremos de manera más directa el tema sobre el control de formato para los stream de C++. Específicamente, veremos las tres diferentes formas que existen en C++ para manipular las banderas relacionadas a los stream y que nos permitirán gobernar de una manera más precisa la forma para representar datos de salida. En ese sentido, veremos que la primera de las forma que nos permitirá el formateo sera a través de las funciones flags(), setf() y unsetf(), la segunda y la tercera forma las encontraremos en ciertos manipuladores directos definidos en las librerías
(i) Banderas de formato:
C++ define algunas banderas de formato para entradas y salidas estándar, las cuales pueden ser manipuladas a través de la funciones (métodos) flags(), setf(), y unsetf(). Por ejemplo,
cout.setf(ios::left);
activa la justificación a la izquierda para todas las salidas dirigidas hacia cout.
A continuación se muestra una tabla de referencia de las banderas de I/O.
Bandera | Descripción |
---|---|
boolalpha | Los valores booleanos pueden ser leídos/escritos usando las palabras "true" y "false" |
dec | Los valores numéricos se muestran en formato decimal |
fixed | Números de punto flotante se despliegan en forma normal |
hex | Los valores numéricos se muestran en formato hexadecimal |
left | La salida es justificada por la izquierda |
oct | Los valores numéricos se muestran en formato octal |
right | La salida es justificada por la derecha |
scientific | Números de punto flotante se despliegan en notación científica |
showbase | Despliega la base de todos los valores numéricos |
showpoint | Despliega el punto decimal y extra ceros, aún cuando no sean necesarios |
showpos | Despliega el símbolo de más antes de valores positivos |
skipws | Descarta caracteres de espaciado (espacios, tabuladores, nuevas líneas) cuando se lee desde un stream |
unitbuf | Descarga el buffer despues de cualquier inserción |
uppercase | Despliega la "e" en notaciones científicas y la "x" en notaciones decimales como letras mayúsculas |
Manipulando la lista de banderas de I/O de C++ (mostrada arriba) se pueden controlar los aspectos relacionados a la forma con la cual se desean presentar los datos en la salida. Por ejemplo, el programa que se muestra en seguida, activa la bandera boolalpha para mostrar los resultados de operaciones booleanas como "true" o "false" en lugar de "0" o "1" como es lo normal.
// Programación con C++
// programa Banderas01.cpp;
// probado en Dev-Cpp Versión 4.9.9.2
#include
using namespace std;
int main(int argc, char *argv[])
{
cout << "0 > 1 ? " << '\t' << (0 > 1) << endl;
cout << "5 > 1 ? " << '\t' << (5 > 1) << endl;
cout.setf(ios::boolalpha); // activar bandera
cout << "0 > 1 ? " << '\t' << (0 > 1) << endl;
cout << "5 > 1 ? " << '\t' << (5 > 1) << endl;
cin.get();
return 0;
}
(2) Manipuladores
Las banderas también pueden manipularse directamente usando los siguientes manipuladores. Seguramente usted ya estará familiarizado con el manipulador endl, el mismo puede darle una idea de cómo son usados los manipuladores. Por ejemplo, usted puede establecer la bandera de números decimales usando el comando:
cout <<>La tabla que se muestra en seguida corresponde a los manipuladores definidos en
.
Manipulador | Descripción | Entrada | Salida |
---|---|---|---|
bollalpha | Activa la bandera boolalpha | X | X |
dec | Activa la bandera dec-imal | X | X |
endl | Escribe caracter de cambio de línea | --- | X |
ends | Escribe el caracter null | --- | X |
fixed | Activa la bandera fixed (para números reales) | --- | X |
flush | Descargar el stream | --- | X |
hex | Activa la bandera hex-adecimal | X | X |
internal | Activa la bandera interna | --- | X |
left | Activa la bandera left (izquierda) | --- | X |
nobollalpha | Desactiva la bandera boolalpha | X | X |
noshowbase | Desactiva la bandera showbase | --- | X |
noshowpoint | Desactiva la bandera showpoint | --- | X |
noshowpos | Desactiva la bandera showpos | --- | X |
noskipws | Desactiva la bandera skipws | X | --- |
nounitbuf | Desactiva la bandera unitbuf | --- | X |
nouppercase | Desactiva la bandera uppercase | --- | X |
hex | Activa la bandera oct-al | X | X |
left | Activa la bandera de justificar derecha | --- | X |
scientific | Activa la bandera scientific | --- | X |
showbase | Activa la bandera showbase | --- | X |
showpoint | Activa la bandera showpoint | --- | X |
showpos | Activa la bandera showpos | --- | X |
skipws | Activa la bandera skipws | X | --- |
unitbuf | Activa la bandera unitbuf | --- | X |
uppercase | Activa la bandera uppercase | --- | X |
ws | Limpiar cualquier espacio al inicio | X | --- |
El programa que se muestra en seguida es un ejemplo de como emplear manipuladores directos para formatear salidas al stream estándar de salida ( cout ). En el mismo, se emplea el manipulador boolalpha para que los resultados de la operaciones logicas sean textuales, o sea, true o false y los manipuladores dec, hex y oct.
// Programación con C++
// programa Banderas02.cpp;
// probado en Dev-Cpp Versión 4.9.9.2
#include
using namespace std;
int main(int argc, char *argv[])
{
cout << boolalpha;
cout << "0 > 1 ? " << '\t' << (0 > 1) << endl;
cout << "5 > 1 ? " << '\t' << (5 > 1) << endl;
cout << dec << 2048 << endl;
cout << hex << 2048 << endl;
cout << oct << 2048 << dec << endl;
cin.get();
return 0;
}
(3) Manipuladores de la libreria 'iomai....
Por último, y para terminar esta sección, hablaremos de los manipuladores definidos en la librería
Manipulador | Descripción | Entrada | Salida |
---|---|---|---|
resetioflags( long f ) | Desactiva las banderas especificadas por f | X | X |
setbase( int base ) | Establece la bases numérica a base | --- | X |
setfill( int ch ) | Establece caracter de relleno a ch | --- | X |
setioflags( long f ) | Activa las banderas especificadas por f | X | X |
setprecision( int p ) | Establece el número de digitos de precisión a p | --- | X |
setw( int w ) | Establece la longitud de campo a w | --- | X |
Atendiendo a las tablas de banderas, así como a las tablas de manipuladores para las mismas mostradas arriva, usted puede (con practica y perceverancia) lograr salidas con muy buena presentación hacia los dispositivos estándar. Por ejemplo, el programa que se mostrará a continuación muestra una de las formas de emplear manipuladores para formatear números de punto flotante, en el programa se despliega una lista de valores numéricos y se establece el campo de salida a una longitud de 12 caracteres y dos decimales.
// Programación con C++
// programa Banderas03.cpp;
// probado en Dev-Cpp Versión 4.9.9.2
#include
#include
using namespace std;
int main()
{
double data[] = { 347.25, 45.75, 124.50, 456.80, 1500.90 };
double total;
int ancho = 12;
cout.precision(2);
cout.setf(ios::fixed);
for (int c = 0; c < 5; c++) {
cout << setw(ancho) << data[c] << endl;
total += data[c];
}
cout.fill('-');
cout << setw(ancho) << "" << endl;
cout.fill(' ');
cout << setw(ancho) << total << endl;
cout << "Por favor oprime Enter...";
cin.get();
return 0;
}
FUENTE: http://es.wikibooks.org/wiki
No hay comentarios:
Publicar un comentario