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:
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