cout << right << setw(width) << val << '\n';
cout << internal << setw(width) << val << '\n';
}
4. В функции main
12345
с шириной 15
. Сделаем это дважды, но во второй раз применим заполнитель '_'
.int main()
{
print_aligned_demo(123456, 15);
print_aligned_demo(123456, 15, '_');
5. Затем выведем значение 0x123abc
std::hex
и std::showbase
с целью указать объекту потока вывода cout
, что он должен выводить числа в шестнадцатеричном формате и добавлять к ним префикс "0x"
, поскольку тогда их нельзя будет интерпретировать по-другому: cout << hex << showbase;
print_aligned_demo(0x123abc, 15);
6. Сделаем то же самое и для oct
cout
использовать восьмеричную систему счисления при выводе чисел. showbase
все еще активен, поэтому 0
будет добавлен к каждому выводимому числу: cout << oct;
print_aligned_demo(0123456, 15);
7. В случае использования hex
uppercase
мы увидим, что символ 'x'
в конструкции "0x"
будет выведен в верхнем регистре. Сочетание 'abc'
в конструкции '0x123abc'
также будет в верхнем регистре: cout << "A hex number with upper case letters: "
<< hex << uppercase << 0x123abc << '\n';
8. Если мы хотим снова вывести число 100
hex
. С помощью dec
вернем его в обычное состояние: cout << "A number: " << 100 << '\n';
cout << dec;
cout << "Oops. now in decimal again: " << 100 << '\n';
9. Мы также можем сконфигурировать формат вывода булевых значений. По умолчанию значение true
1
, а false
— как 0
. С помощью boolalpha
можно задать ему текстовое представление: cout << "true/false values: "
<< true << ", " << false << '\n';
cout << boolalpha
<< "true/false values: "
<< true << ", " << false << '\n';
10. Взглянем на переменные с плавающей точкой типов float
double
. Если нужно вывести число наподобие 12.3
, то увидим 12.3
. При наличии такого числа, как 12.0
, поток вывода отбросит десятичную точку. Это можно изменить, использовав showpoint
. С его помощью десятичная точка будет отображаться всегда: cout << "doubles: "
<< 12.3 << ", "
<< 12.0 << ", "
<< showpoint << 12.0 << '\n';
11. Представление чисел с плавающей точкой может иметь модификаторы scientific
fixed
. Первый означает следующее: число 300.0
будет выглядеть как "3.0E2"
, поскольку 300
равно 3.0 * 10^2
. Модификтор fixed
позволяет вернуться к представлению с десятичной точкой: cout << "scientific double: " << scientific
<< 123000000000.123 << '\n';
cout << "fixed double: " << fixed
<< 123000000000.123 << '\n';
12. Помимо нотации мы можем решить, какую точность будут иметь числа с плавающей точкой. Создадим очень маленькое значение и выведем его, указав точность десять знаков после запятой, а затем повторим вывод, но укажем точность один знак:
cout << "Very precise double: "
<< setprecision(10) << 0.0000000001 << '\n';
cout << "Less precise double: "
<< setprecision(1) << 0.0000000001 << '\n';
}
13. Компиляция и запуск программы дают следующий длинный результат. Первые четыре блока выходных данных получены от вспомогательной функции print
setw
и left/right/internal
. Затем мы работали с регистрами представлений системы счисления, представлениями булевых чисел, а также форматированием чисел с плавающей точкой. Вам стоит поработать со всеми этими возможностями, чтобы получше ознакомиться с ними.$ ./formatting
================
123456
123456
123456
================
123456__________
__________123456
__________123456