c++ manipulators

C++-Cómo restablecer los indicadores del manipulador de la secuencia de salida



manipulators (5)

Eche un vistazo a Boost.IO_State_Savers , que proporciona guardas de alcance de estilo RAII para las banderas de un iostream.

Ejemplo:

#include <boost/io/ios_state.hpp> { boost::io::ios_all_saver guard(cout); // Saves current flags and format cout << setw(14) << " CHARGE/ROOM" << endl; cout << setfill(''-'') << setw(11) << ''-'' << " " << setw(15) << ''-'' << " " << setw(11) << ''-'' << endl; // dtor of guard here restores flags and formats }

Guardias más especializados (solo para relleno, ancho, precisión, etc. también están en la biblioteca. Consulte la documentación para obtener más información.

Esta pregunta ya tiene una respuesta aquí:

Tengo una línea de código que establece el valor de relleno en un carácter ''-'' en mi salida, pero necesito restablecer la marca setfill a su carácter de espacio en blanco predeterminado. ¿Cómo puedo hacer eso?

cout << setw(14) << " CHARGE/ROOM" << endl; cout << setfill(''-'') << setw(11) << ''-'' << " " << setw(15) << ''-'' << " " << setw(11) << ''-'' << endl;

Pensé que esto podría funcionar:

cout.unsetf(ios::manipulatorname) // Howerver I dont see a manipulator called setfill

¿Estoy en el camino equivocado?


El carácter nulo lo restablecerá a su estado original: setfill(''/0'')


Puede cambiar manualmente la marca setfill a lo que necesite que sea:

float number = 4.5; cout << setfill(''-''); cout << setw(11) << number << endl; // --------4.5 cout << setfill('' ''); cout << setw(11) << number << endl; // 4.5


Puede usar copyfmt para guardar el formato inicial de cout. Una vez que haya terminado con la salida formateada, puede usarla nuevamente para restaurar la configuración predeterminada ( incluido el carácter de relleno ).

{ // save default formatting ios init(NULL); init.copyfmt(cout); // change formatting... cout << setfill(''-'') << setw(11) << ''-'' << " "; cout << setw(15) << ''-'' << " "; cout << setw(11) << ''-'' << endl; // restore default formatting cout.copyfmt(init); }


Puede usar la función ios::fill() para establecer y restaurar el carácter de relleno en su lugar.

http://www.cplusplus.com/reference/iostream/ios/fill/

#include <iostream> using namespace std; int main () { char prev; cout.width (10); cout << 40 << endl; prev = cout.fill (''x''); cout.width (10); cout << 40 << endl; cout.fill(prev); return 0; }