Utilize o Manipulador setw em C++

Jinku Hu 12 outubro 2023
Utilize o Manipulador setw em C++

Este artigo mostra como utilizar o manipulador de fluxo setw em C++.

Use a função std::setw para modificar a largura da próxima operação de E / S em C++

Manipuladores de fluxo são objetos especiais que modificam a formatação de entrada / saída e às vezes geram alguma ação. A função std::endl, indiscutivelmente o objeto mais comum utilizado em fluxos de saída, é de fato um manipulador de fluxo. Ele imprime um caractere de nova linha e libera o buffer de saída.

Por outro lado, o comando std::setw não gera nenhuma saída. Em vez disso, ele define a largura da próxima E / S para o argumento integral passado. Alguns manipuladores de fluxo usam argumentos; estes devem incluir um cabeçalho <iomanip>. O exemplo a seguir demonstra o cenário básico de formatação de saída para o manipulador setw. O manipulador setfill é o companheiro natural para setw. O primeiro é útil para modificar o caractere de preenchimento com o argumento char fornecido.

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

Resultado:

setw() : | 11 | setw(4) : | 11 | setw(4) : | 22 --2233 |

Alternativamente, podemos usar o manipulador setw para restringir o número de caracteres extraídos do objeto stringstream. Este método pode ser útil para buffers char que são declarados como matrizes fixas. Geralmente, os manipuladores são implementados usando a sobrecarga de função.

Cada manipulador é a função que retorna uma referência ao fluxo. Os ponteiros para uma dessas funções são passados ​​para os operadores de extração / inserção de fluxo, que são operadores sobrecarregados por conta própria. As funções de argumento são chamadas a partir dos corpos dos operadores sobrecarregados.

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

Resultado:

hello

Um recurso útil do manipulador setw é definir facilmente o limite de entrada do usuário que precisa ser armazenado em um buffer de tamanho fixo. Precisamos apenas passar o sizeof(buffer) como o argumento para setw. Observe que a chamada setw afeta uma única operação de E / S e, em seguida, a largura padrão é restaurada automaticamente. Por outro lado, a modificação setfill permanece ativa até a mudança explícita.

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

Resultado:

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