Utilice el manipulador setw en C++
Este artículo muestra cómo utilizar el manipulador de flujo setw
en C++.
Utilice la función std::setw
para modificar el ancho de la siguiente operación de E / S en C++
Los manipuladores de flujo son objetos especiales que modifican el formato de entrada / salida y, a veces, generan alguna acción. La función std::endl
, posiblemente el objeto más común utilizado en los flujos de salida, es de hecho un manipulador de flujos. Imprime un carácter de nueva línea y vacía el búfer de salida.
Por otro lado, el comando std::setw
no genera ninguna salida. En cambio, establece el ancho de la siguiente E / S en el argumento integral pasado. Algunos manipuladores de flujos utilizan argumentos; estos deben incluir un encabezado <iomanip>
. El siguiente ejemplo demuestra el escenario de formato de salida básico para el manipulador setw
. El manipulador setfill
es el compañero natural de setw
. El primero es útil para modificar el carácter de relleno con el argumento char
dado.
#include <iomanip>
#include <iostream>
#include <sstream>
using std::cout;
using std::endl;
using std::setw;
using std::string;
int main() {
cout << "setw() : |" << 11 << "|" << endl
<< "setw(4): |" << setw(4) << 11 << "|" << endl
<< "setw(4): |" << 22 << setw(4) << std::setfill('-') << 22 << 33 << "|"
<< endl;
return EXIT_SUCCESS;
}
Producción :
setw() : |11|
setw(4): | 11|
setw(4): |22--2233|
Alternativamente, podemos usar el manipulador setw
para restringir el número de caracteres extraídos del objeto stringstream
. Este método puede ser útil para búferes char
que se declaran como matrices fijas. Generalmente, los manipuladores se implementan utilizando la función de sobrecarga.
Cada manipulador es la función que devuelve una referencia al flujo. Los punteros a una de estas funciones se pasan a los operadores de extracción / inserción de flujo, que son operadores sobrecargados por sí mismos. Las funciones de argumento se invocan desde los cuerpos de los operadores sobrecargados.
#include <iomanip>
#include <iostream>
#include <sstream>
using std::cout;
using std::endl;
using std::setw;
using std::string;
int main() {
std::stringstream ss1("hello there");
char arr[10];
ss1 >> setw(6) >> arr;
cout << arr;
return EXIT_SUCCESS;
}
Producción :
hello
Una característica útil del manipulador setw
es establecer fácilmente el límite de la entrada del usuario que debe almacenarse en un búfer de tamaño fijo. Solo necesitamos pasar el sizeof(buffer)
como argumento a setw
. Observe que la llamada setw
afecta a una sola operación de E / S, y luego el ancho predeterminado se restaura automáticamente. Por el contrario, la modificación setfill
permanece activa hasta el cambio explícito.
#include <iomanip>
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
using std::setw;
int main() {
char buffer[24];
cout << "username: ";
cin >> setw(sizeof(buffer)) >> buffer;
return EXIT_SUCCESS;
}
Producción :
username:
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook