Utilice el manipulador setw en C++

Jinku Hu 12 octubre 2023
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:
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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