E/S formateada en C++

C++ lo ayuda a formatear las operaciones de E/S, como determinar la cantidad de dígitos que se mostrarán después del punto decimal, especificar la base numérica, etc.

Ejemplo:

  • Si queremos agregar el signo + como prefijo de la salida, podemos usar el formato para hacerlo:
    stream.setf(ios::showpos)  
    If input=100, output will be +100 
  • Si queremos agregar ceros finales en la salida para que se muestren cuando sea necesario usando el formato:
    stream.setf(ios::showpoint) 
    If input=100.0, output will be 100.000

Nota: Aquí, flujo se refiere a los flujos definidos en C++ como cin, cout, cerr, clog.

Hay dos formas de hacerlo:

  1. Usando la clase ios o varias funciones miembro de ios.
  2. Uso de manipuladores (funciones especiales)
  1. Formateo usando los miembros de ios:

    La secuencia tiene las banderas de formato que controlan la forma de formatearla. Usando esta función setf, podemos establecer las banderas, que nos permiten mostrar un valor en un formato particular. La clase ios declara una enumeración de máscara de bits llamada fmtflags en la que se definen los valores (showbase, showpoint, oct, hex, etc.). Estos valores se utilizan para establecer o borrar los indicadores de formato.

    Algunas funciones estándar de la clase ios son:

    1. width(): el método de ancho se utiliza para establecer el ancho de campo requerido. La salida se mostrará en el ancho dado
    2. precision(): el método de precisión se utiliza para establecer el número del punto decimal en un valor flotante
    3. fill(): el método de relleno se utiliza para establecer un carácter para completar el espacio en blanco de un campo
    4. setf(): el método setf se usa para establecer varios indicadores para formatear la salida
    5. unsetf(): el método unsetf se usa para eliminar la configuración de la bandera

    Laboral:

    #include<bits/stdc++.h>
    using namespace std;
      
    // The width() function defines width 
    // of the next value to be displayed 
    // in the output at the console.
    void IOS_width()
    {
        cout << "--------------------------\n";
        cout << "Implementing ios::width\n\n";
          
        char c = 'A';
           
        // Adjusting width will be 5.
        cout.width(5);
           
        cout << c <<"\n";
           
           
        int temp = 10;
           
        // Width of the next value to be
        // displayed in the output will 
        // not be adjusted to 5 columns.
        cout<<temp;
        cout << "\n--------------------------\n";
    }
      
    void IOS_precision()
    {
        cout << "\n--------------------------\n";
        cout << "Implementing ios::precision\n\n";
        cout << "Implementing ios::width";
        cout.setf(ios::fixed, ios::floatfield);
        cout.precision(2);
        cout<<3.1422;
        cout << "\n--------------------------\n";
    }
      
    // The fill() function fills the unused 
    // white spaces in a value (to be printed
    // at the console), with a character of choice.
    void IOS_fill()
    {
        cout << "\n--------------------------\n";
        cout << "Implementing ios::fill\n\n";
        char ch = 'a';
          
        // Calling the fill function to fill 
        // the white spaces in a value with a
        // character our of choice.
        cout.fill('*');
          
        cout.width(10);
        cout<<ch <<"\n";
          
          
        int i = 1;
          
        // Once you call the fill() function, 
        // you don't have to call it again to 
        // fill the white space in a value with
        // the same character.
        cout.width(5);
        cout<<i;
        cout << "\n--------------------------\n";
    }
      
    void IOS_setf()
    {
        cout << "\n--------------------------\n";
        cout << "Implementing ios::setf\n\n";
        int val1=100,val2=200;
        cout.setf(ios::showpos);
        cout<<val1<<" "<<val2;
        cout << "\n--------------------------\n";
    }
      
    void IOS_unsetf()
    {
        cout << "\n--------------------------\n";
        cout << "Implementing ios::unsetf\n\n";
        cout.setf(ios::showpos|ios::showpoint);
        // Clear the showflag flag without 
        // affecting the showpoint flag
        cout.unsetf(ios::showpos); 
        cout<<200.0; 
        cout << "\n--------------------------\n";
    }
      
    // Driver Method
    int main()
    {
        IOS_width();
        IOS_precision;
        IOS_fill();
        IOS_setf();
        IOS_unsetf();
        return 0;
    Producción:

    --------------------------
    Implementing ios::width
    
        A
    10
    --------------------------
    
    --------------------------
    Implementing ios::fill
    
    *********a
    ****1
    --------------------------
    
    --------------------------
    Implementing ios::setf
    
    +100 +200
    --------------------------
    
    --------------------------
    Implementing ios::unsetf
    
    200.000
    --------------------------
    
  2. Formateo usando manipuladores
    La segunda forma de modificar los parámetros de formato de un flujo es mediante el uso de funciones especiales denominadas manipuladores que se pueden incluir en una expresión de E/S.
    Los manipuladores estándar se muestran a continuación:
    1. boolalpha: el manipulador boolalpha de los manipuladores de flujo en C++ se usa para activar el indicador bool alpha
    2. dec: el manipulador dec de los manipuladores de flujo en C++ se usa para activar el indicador dec
    3. endl: el manipulador endl de los manipuladores de flujo en C++ se usa para generar un carácter de nueva línea.
    4. y: El manipulador y de los manipuladores de flujo en C++ se usa para vaciar el flujo
    5. extremos: el manipulador de extremos de los manipuladores de flujo en C++ se usa para generar un valor nulo
    6. corregido: el manipulador fijo de los manipuladores de flujo en C++ se usa para activar el indicador fijo
    7. vaciar: el manipulador de vaciado de los manipuladores de flujo en C++ se usa para vaciar un flujo
    8. hexadecimal: el manipulador hexadecimal de los manipuladores de flujo en C++ se utiliza para activar el indicador hexadecimal
    9. interno : el manipulador interno de los manipuladores de flujo en C++ se usa para activar el indicador interno
    10. izquierda : el manipulador izquierdo de los manipuladores de flujo en C++ se usa para activar la bandera izquierda
    11. noboolalpha : el manipulador noboolalpha de los manipuladores de flujo en C++ se usa para desactivar el indicador bool alpha
    12. noshowbase : el manipulador noshowbase de los manipuladores de flujo en C++ se usa para desactivar la bandera de exhibición
    13. noshowpoint : el manipulador noshowpoint de los manipuladores de flujo en C++ se usa para desactivar el indicador de punto de visualización
    14. noshowpos : el manipulador noshowpos de los manipuladores de flujo en C++ se usa para desactivar el indicador showpos
    15. noskipws : el manipulador noskipws de los manipuladores de flujo en C++ se usa para desactivar el indicador skipws
    16. nounitbuf : el manipulador nounitbuf de los manipuladores de flujo en C++ se usa para desactivar el indicador de beneficio de la unidad
    17. nouppercase : el manipulador nouppercase de los manipuladores de flujo en C++ se usa para desactivar el indicador de mayúsculas
    18. oct : el manipulador oct de los manipuladores de flujo en C++ se usa para activar el indicador oct
    19. resetiosflags(fmtflags f) : El manipulador resetiosflags de los manipuladores de flujo en C++ se usa para desactivar el indicador especificado en f
    20. derecha : el manipulador derecho de los manipuladores de flujo en C++ se usa para activar la bandera derecha
    21. científico : el manipulador científico de los manipuladores de flujo en C++ se usa para activar la bandera científica
    22. setbase(int base) : El manipulador setbase de los manipuladores de flujo en C++ se usa para establecer la base numérica en base
    23. setfill(int ch) : El manipulador setfill de los manipuladores de flujo en C++ se usa para establecer el carácter de relleno en ch
    24. setiosflags(fmtflags f): el manipulador setiosflags de los manipuladores de flujo en C++ se usa para Activar el indicador especificado en f
    25. setprecision(int p): el manipulador setprecision de los manipuladores de flujo en C++ se usa para establecer el número de dígitos de precisión
    26. setw(int w): el manipulador setw de los manipuladores de flujo en C++ se usa para establecer el ancho del campo en w
    27. showbase : el manipulador showbase de los manipuladores de flujo en C++ se usa para activar el indicador showbase
    28. showpoint : el manipulador de showpoint de los manipuladores de flujo en C++ se usa para activar el indicador de punto de visualización
    29. showpos : el manipulador showpos de los manipuladores de flujo en C++ se usa para activar el indicador showpos
    30. skipws : el manipulador skipws de los manipuladores de flujo en C++ se usa para activar el indicador skipws
    31. unitbuf : el manipulador unitbuf de los manipuladores de flujo en C++ se usa para activar el indicador unitbuf
    32. uppercase : el manipulador de mayúsculas de los manipuladores de flujo en C++ se usa para activar la bandera de mayúsculas
    33. ws : el manipulador ws de los manipuladores de flujo en C++ se usa para omitir los espacios en blanco iniciales

    Para acceder a los manipuladores que toman parámetros (como setw()), debe incluir el archivo de encabezado «iomanip» en su programa.

    Ejemplo:

    #include <iomanip>
    #include <iostream>
    using namespace std;
      
    void Example()
    {
        // performs ssame as setf( )
        cout << setiosflags(ios::showpos);
        cout << 123<<"\n";
          
        // hexadecimal base (i.e., radix 16)
        cout << hex << 100 << endl; 
          
        // Set the field width
        cout << setfill('*') << setw(10) << 2343.0; 
    }
      
    int main()
    {
        Example();
        return 0;
    }
    Producción:

    +123
    64
    *****+2343
    

    El manipulador setiosflags().

Publicación traducida automáticamente

Artículo escrito por Somil_singh y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *