Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se muestra cómo el formato de control y cómo crear operadores de inserción dispone de clases.El operador de inserción (<<), que se preprograma para todos los tipos de datos estándar de C++, envía bytes a un objeto del flujo de salida.Los operadores de inserción ejecutan “los manipuladores predefinidos,” que son elementos que cambian el formato predeterminado de argumentos enteros.
Puede controlar el formato con las opciones siguientes:
Ancho de salida
Alineación
Precisión
base
Ancho de salida
Para alinear la salida, especifica el ancho de la salida de cada elemento colocando el manipulador de setw en la secuencia o llamando a la función miembro de ancho .Este ejemplo derecho-alinea los valores de una columna al menos 10 caracteres de ancho:
// output_width.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
int main( )
{
double values[] = { 1.23, 35.36, 653.7, 4358.24 };
for( int i = 0; i < 4; i++ )
{
cout.width(10);
cout << values[i] << '\n';
}
}
Output
1.23
35.36
653.7
4358.24
Los espacios en blanco iniciales se agregan a cualquier valor menos de 10 caracteres de ancho.
Para completar un campo, utilice la función miembro de relleno , que establece el carácter de relleno para los campos que tienen un ancho especificado.El valor predeterminado es un espacio en blanco.Para completar la columna con números con asteriscos, modifique el bucle anterior de Para como sigue:
for( int i = 0; i < 4; i++ )
{
cout.width( 10 );
cout.fill( '*' );
cout << values[i] << endl;
}
El manipulador de endl reemplaza el carácter de nueva línea ('\n').El resultado tiene el siguiente aspecto:
******1.23
*****35.36
*****653.7
***4358.24
Para especificar los anchos de los datos en la misma línea, utilice el manipulador de setw :
// setw.cpp
// compile with: /EHsc
#include <iostream>
#include <iomanip>
using namespace std;
int main( )
{
double values[] = { 1.23, 35.36, 653.7, 4358.24 };
char *names[] = { "Zoot", "Jimmy", "Al", "Stan" };
for( int i = 0; i < 4; i++ )
cout << setw( 6 ) << names[i]
<< setw( 10 ) << values[i] << endl;
}
Output
La función miembro de ancho se declara en <iostream> .Si utiliza setw o cualquier otro manipulador con argumentos, debe incluir <iomanip> .En la salida, las cadenas se imprimen en un campo de ancho 6 y de enteros en un campo de ancho 10:
Zoot 1.23
Jimmy 35.36
Al 653.7
Stan 4358.24
ni setw ni ancho trunca valores.Si el formato supera el ancho, el valor completo imprime, sujeto al valor de precisión de la secuencia.setw y ancho afectan al campo siguiente solo.El ancho de campo revierte a su comportamiento predeterminado (el ancho necesario) una vez formulario un campo.Sin embargo, las otras opciones de formato de secuencia en vigor hasta cambiado.
Alineación
Las secuencias de salida tienen como valor predeterminado el texto alineado a la derecha.Para izquierdo-alinear los nombres en el ejemplo anterior y derecho-alinear números, reemplace el bucle de Para como sigue:
for ( int i = 0; i < 4; i++ )
cout << setiosflags( ios::left )
<< setw( 6 ) << names[i]
<< resetiosflags( ios::left )
<< setw( 10 ) << values[i] << endl;
El resultado tiene el siguiente aspecto:
Zoot 1.23
Jimmy 35.36
Al 653.7
Stan 4358.24
Izquierdo-alinear el marcador se establece mediante el manipulador de setiosflags con el enumerador de Left .Este enumerador se define en la clase de IOS , por lo que la referencia debe incluir el prefijo de IOS:: .El manipulador de resetiosflags gira desactivado izquierdo-alinear el marcador.a diferencia de ancho y de setw, el efecto de setiosflags y de resetiosflags es permanente.
Precisión
el valor predeterminado para la precisión flotante es seis.por ejemplo, el número 3466,9768 imprime como 3466,98.Para cambiar la forma en que este valor imprime, que utiliza el manipulador de setprecision .El manipulador tiene dos marcadores: fijo y científico.si se establece fijo , el número imprime como 3466,976800.si se establece científico , imprime como 3.4669773+003.
Para mostrar los números de punto flotante mostrados en Alineacin con un dígito significativo, reemplace el bucle de Para como sigue:
for ( int i = 0; i < 4; i++ )
cout << setiosflags( ios::left )
<< setw( 6 )
<< names[i]
<< resetiosflags( ios::left )
<< setw( 10 )
<< setprecision( 1 )
<< values[i]
<< endl;
el programa imprime esta lista:
Zoot 1
Jimmy 4e+001
Al 7e+002
Stan 4e+003
para eliminar la notación científica, inserte esta instrucción antes de que el bucle de Para :
cout << setiosflags( ios::fixed );
Con la notación fija, el programa imprime con un dígito después del separador decimal.
Zoot 1.2
Jimmy 35.4
Al 653.7
Stan 4358.2
Si cambia el indicador de IOS:: fijo a IOS:: científico, el programa imprime esto:
Zoot 1.2e+000
Jimmy 3.5e+001
Al 6.5e+002
Stan 4.4e+003
Una vez más el programa imprime un dígito después del separador decimal.Si se establece IOS:: fijo o IOS:: científico , el valor de precisión determina el número de dígitos después del separador decimal.Si se establece ninguno de los dos marcadores, el valor de precisión determina el número total de dígitos significativos.El manipulador de resetiosflags borra estos marcadores.
base
diciembre, manipuladores de Oct, y de Hexadecimal establecen la base predeterminada para la entrada y salida.Por ejemplo, si inserta el manipulador de Hexadecimal en el flujo de salida, el objeto correctamente convierte la representación de datos internos de enteros a un formato de salida hexadecimal.Los números se muestran con dígitos con f en minúsculas si el indicador de mayúsculas está claro (valor predeterminado); si no, se muestran en mayúscula.Base predeterminada es diciembre (decimal).