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;
}