Spec-Zone.ru › C++

std::setw

Объявлено в заголовочном файле <iomanip>
/* unspecified */ setw( int n );

При использовании в выражении out << std::setw(n) или in >> std::setw(n) устанавливает параметр width потока out или in в значение, равное n.

Некоторые операции сбрасывают ширину в ноль (см. примечания ниже), поэтому для установки ширины перед несколькими операциями может потребоваться многократно вызывать std::setw.

Параметры

n - новое значение ширины

Возвращаемое значение

Объект типа, не указанного явно, такой, что

  • если out — объект типа std::basic_ostream<CharT, Traits>, выражение out << setw(n)
    • имеет тип std::basic_ostream<CharT, Traits>&
    • имеет значение out
    • ведёт себя так, как если бы вызывало f(out, n)
  • если in — объект типа std::basic_istream<CharT, Traits>, выражение in >> setw(n)
    • имеет тип std::basic_istream<CharT, Traits>&
    • имеет значение in
    • ведёт себя так, как если бы вызывало f(in, n)

где функция f определена следующим образом:

void f(std::ios_base& str, int n)
{
    // set width
    str.width(n);
}

Примечания

Свойство ширины потока сбрасывается в ноль (что означает «не задано»), если вызывается любая из следующих функций:

  • Ввод
    • operator>>(basic_istream&, basic_string&)
    • operator>>(basic_istream&, char*)
  • Вывод
    • Перегрузки basic_ostream::operator<<(), принимающие арифметические типы или указатели void (на этапе 3 функции num_put::put())
    • operator<<(basic_ostream&, char) и operator<<(basic_ostream&, char*)
    • operator<<(basic_ostream&, basic_string&)
    • std::put_money (внутри money_put::put())
    • std::quoted (при использовании с выходным потоком)

Точное влияние этого манипулятора на ввод и вывод зависит от конкретной функции ввода-вывода и описано отдельно на странице каждой перегрузки operator<< и operator>>.

Пример

#include <iomanip>
#include <iostream>
#include <sstream>

int main()
{
    std::cout << "no setw: [" << 42 << "]\n"
              << "setw(6): [" << std::setw(6) << 42 << "]\n"
              << "no setw, several elements: [" << 89 << 12 << 34 << "]\n"
              << "setw(6), several elements: [" << 89 << std::setw(6) << 12 << 34 << "]\n";
    
    std::istringstream is("hello, world");
    char arr[10];
    
    is >> std::setw(6) >> arr;
    std::cout << "Input from \"" << is.str() << "\" with setw(6) gave \""
              << arr << "\"\n";
}

Вывод:

no setw: [42]
setw(6): [    42]
no setw, several elements: [891234]
setw(6), several elements: [89    1234]
Input from "hello, world" with setw(6) gave "hello"

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были применены задним числом к ранее опубликованным стандартам C++.

Отчёт об ошибке Применён к Опубликованное поведение Правильное поведение
LWG 183 C++98 setw можно было использовать только с потоками
типа std::ostream или std::istream
можно использовать с любым
символьным потоком

См. также

width
управляет шириной поля
(открытая функция-член std::ios_base)
setfill
изменяет символ заполнения
(шаблон функции)
internalleftright
задаёт расположение символов заполнения
(функция)
showbasenoshowbase
управляет отображением префикса, указывающего основание системы счисления
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/manip/setw

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API