C++
станд :: iomanip
Поиск…
станд :: setw
int val = 10;
// val will be printed to the extreme left end of the output console:
std::cout << val << std::endl;
// val will be printed in an output field of length 10 starting from right end of the field:
std::cout << std::setw(10) << val << std::endl;
Эти результаты:
10
10
1234567890
(где последняя строка там, чтобы помочь увидеть смещения персонажа).
Иногда нам нужно установить ширину поля вывода, как правило, когда нам нужно получить результат в некотором структурированном и правильном макете. Это можно сделать, используя std::setw
из std :: iomanip .
Синтаксис для std::setw
:
std::setw(int n)
где n - длина выходного поля, которое должно быть установлено
станд :: setprecision
При использовании в выражении out << setprecision(n)
или in >> setprecision(n)
, задает параметр точности потока или в точном n. Параметр этой функции является целым числом, что является новым значением для точности.
Пример:
#include <iostream>
#include <iomanip>
#include <cmath>
#include <limits>
int main()
{
const long double pi = std::acos(-1.L);
std::cout << "default precision (6): " << pi << '\n'
<< "std::precision(10): " << std::setprecision(10) << pi << '\n'
<< "max precision: "
<< std::setprecision(std::numeric_limits<long double>::digits10 + 1)
<< pi << '\n';
}
//Output
//default precision (6): 3.14159
//std::precision(10): 3.141592654
//max precision: 3.141592653589793239
станд :: setfill
При использовании в выражении out << setfill(c)
задает заполняющий символ потока до c
.
Примечание. Текущий символ заполнения может быть получен с помощью std::ostream::fill
.
Пример:
#include <iostream>
#include <iomanip>
int main()
{
std::cout << "default fill: " << std::setw(10) << 42 << '\n'
<< "setfill('*'): " << std::setfill('*')
<< std::setw(10) << 42 << '\n';
}
//output::
//default fill: 42
//setfill('*'): ********42
СТД :: setiosflags
При использовании в выражении out << setiosflags(mask)
или in >> setiosflags(mask)
, устанавливает все флаги формата потока или в соответствии с маской.
Список всех std::ios_base::fmtflags
:
-
dec
use десятичная база для целочисленного ввода-вывода -
oct
- использование восьмеричной базы для целых операций ввода-вывода -
hex
- использовать шестнадцатеричную базу для целых операций ввода-вывода -
basefield
-dec|oct|hex|0
полезно для операций маскировки -
left
- левая настройка (добавьте символы заполнения вправо) -
right
- правая (добавляет символы заполнения влево) -
internal
внутренняя настройка (добавляет символы заполнения во внутреннюю обозначенную точку) -
adjustfield
-left|right|internal
. Полезно для маскировки -
scientific
- генерировать типы с плавающей точкой, используя научную нотацию, или шестнадцатеричную нотацию, если они объединены с фиксированными -
fixed
- генерируют типы с плавающей точкой с использованием фиксированной нотации или шестнадцатеричной нотации, если они объединены с научными -
floatfield
-scientific|fixed|(scientific|fixed)|0
. Полезно для маскировки -
boolalpha
- вставить и извлечьbool
тип в алфавитно-цифровом формате -
showbase
- генерировать префикс, указывающий числовую базу для целочисленного вывода, для этого требуется индикатор валюты в валютном вводе-выводе -
showpoint
-showpoint
генерировать символ десятичной точки для вывода чисел с плавающей запятой -
showpos
- генерировать символ+
для неотрицательного числового вывода -
skipws
- пропускать ведущие пробелы перед определенными операциями ввода -
unitbuf
выход после каждой операции вывода -
uppercase
- заменить некоторые строчные буквы с их прописными эквивалентами в определенных выходных операциях вывода
Пример манипуляторов:
#include <iostream>
#include <string>
#include<iomanip>
int main()
{
int l_iTemp = 47;
std::cout<< std::resetiosflags(std::ios_base::basefield);
std::cout<<std::setiosflags( std::ios_base::oct)<<l_iTemp<<std::endl;
//output: 57
std::cout<< std::resetiosflags(std::ios_base::basefield);
std::cout<<std::setiosflags( std::ios_base::hex)<<l_iTemp<<std::endl;
//output: 2f
std::cout<<std::setiosflags( std::ios_base::uppercase)<<l_iTemp<<std::endl;
//output 2F
std::cout<<std::setfill('0')<<std::setw(12);
std::cout<<std::resetiosflags(std::ios_base::uppercase);
std::cout<<std::setiosflags( std::ios_base::right)<<l_iTemp<<std::endl;
//output: 00000000002f
std::cout<<std::resetiosflags(std::ios_base::basefield|std::ios_base::adjustfield);
std::cout<<std::setfill('.')<<std::setw(10);
std::cout<<std::setiosflags( std::ios_base::left)<<l_iTemp<<std::endl;
//output: 47........
std::cout<<std::resetiosflags(std::ios_base::adjustfield)<<std::setfill('#');
std::cout<<std::setiosflags(std::ios_base::internal|std::ios_base::showpos);
std::cout<<std::setw(10)<<l_iTemp<<std::endl;
//output +#######47
double l_dTemp = -1.2;
double pi = 3.14159265359;
std::cout<<pi<<" "<<l_dTemp<<std::endl;
//output +3.14159 -1.2
std::cout<<std::setiosflags(std::ios_base::showpoint)<<l_dTemp<<std::endl;
//output -1.20000
std::cout<<setiosflags(std::ios_base::scientific)<<pi<<std::endl;
//output: +3.141593e+00
std::cout<<std::resetiosflags(std::ios_base::floatfield);
std::cout<<setiosflags(std::ios_base::fixed)<<pi<<std::endl;
//output: +3.141593
bool b = true;
std::cout<<std::setiosflags(std::ios_base::unitbuf|std::ios_base::boolalpha)<<b;
//output: true
return 0;
}