|
Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не Qt, Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.
|
Организация ввода-вывода в C++
7.1.2 Использование манипуляторов форматирования
Манипуляторы встраиваются непосредственно в операторы ввода-вывода. C одним из манипуляторов (
) читатель уже встречался начиная с первой главы книги. В табл. 7.2 приведены основные манипуляторы форматирования с примерами их использования. Для корректного использования всех манипуляторов необходимо подключить библиотеку:
#include <iomanip>
| Манипулятор | Манипулятор | Пример использования | Результат |
|---|---|---|---|
| setw(n) | Определяет ширину поля вывода в n символов |
int r=253; cout. setf ( ios :: fixed ); cout<<"r="<<setw(8)<<r<<endl; |
r= 253 |
| setprecision(n) | Определяет количество цифр в дробной части числа |
double h=1234.6578; cout. setf ( ios :: fixed ); cout<<"h="<<setw(15); cout<<setprecision(3); cout<<h<<endl; |
h=1234.658 |
| dec | Перевод числа в десятичную систему (по умолчанию) |
int r=0253; cout<<"r="<<dec<<r<<endl; |
; r=171 |
| oct | Перевод числа в восьмеричную систему |
int r=253; cout<<"r="<<oct<<r<<endl; |
r=375 |
| hex | Перевод числа в шестнадцатеричную систему |
int r=253; cout<<"r="<<hex<<r<<endl |
p=fd |
| right | Выравнивание по правой границе |
int r=-25; cout.width(15); cout<<"r="<<setw(15)<<right; cout<<r<<endl; |
r=-25 |
| left | Выравнивание по левой границе (по умолчанию) |
int r=-25; cout.width(15); cout<<"r="<<setw(15)<<left; cout<<r<<endl; |
r=-25 |
| boolalpha | Вывод логических величин в текстовом виде (true, false) |
bool a=true; cout<<boolalpha<<a<<endl; |
true |
| noboolalpha | Вывод логических величин в числовом виде (1, 0) |
bool a=true; cout<<noboolalpha<<a<<endl; |
1 |
| showpos | Выводить знак "+" для положительных чисел |
int p=29; cout<<"p="<<showpos<<p<< endl; |
p=+29 |
| noshowpos | Не выводить знак "+" для положительных чисел |
int p=29; cout<<"p="<< noshowpos<<p<<endl; |
p=29 |
| uppercase | Использовать прописные буквы в шестнадцатеричных цифрах |
int p=253; cout<<"p="<<hex<< uppercase<<p<<endl; |
p=FD |
| nouppercase | Использовать строчные буквы в шестнадцатеричных цифрах |
int p=253; cout<<"p="<<hex<<nouppercase; cout<<p<<endl; |
p=fd |
| showbase | Выводить индикатор основания системы счисления |
int p=253; cout<<"p="<<hex<<uppercase <<showbase<<p<<endl; |
p=0XFD |
| noshowbase | Не выводить индикатор основания системы счисления |
int p=253; cout<<"p="<<hex<<uppercase; cout<<noshowbase<<p<<endl; |
p=FD |
| setfill(c) | Установить символ с как заполнитель |
cout<<"x="<<right<<
setw(10)<<setprecision(4);
cout<<setfill("!");
cout<<(float)1/7<<endl;
cout<<"x="<<left<<setw(10);
cout<<setprecision(4);
cout<<setfill("!");
cout<<(float)1/7<<endl; |
x=!!!!0.1429 x=0.1429!!!! |
| scientific | Экспоненциальная форма вывода вещественных чисел |
double p=146.673; cout<<"p="<<scientific<<p<< endl; |
p=1.466730e+002 |
| fixed | Фиксированная форма вывода вещественных чисел (по умолчанию) |
cout<<"p="<<fixed<<p<<endl; |
p=146.673 |
Кроме того, управлять шириной поля вывода можно с помощью операторов:
-
cout.width(n) — устанавливает ширину поля вывода —
позиций; -
cout.precision(m) — определяет
цифр в дробной части числа.
В п. 7.1.1 и 7.1.2 были рассмотрены основные возможности форматированного ввода-вывода. При использовании конструкций cin и cout фактически происходит ввод-вывод в текстовый файл. При вводе текстовым файлом является клавиатура ПК, при выводе в качестве текстового файла выступает экран дисплея, cin и cout фактически являются именами потоков3Подробнее о текстовых потоках речь пойдёт в п. 7.2, которые отвечают за ввод и вывод в текстовый файл. Поэтому многие рассмотренные возможности форматированного ввода-вывода будут использоваться и при обработке текстовых файлов.
Существует два основных типа файлов: текстовые и двоичные. Файлы позволяют пользователю считывать большие объёмы данных непосредственно с диска, не вводя их с клавиатуры.
в дробной части числа