Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не 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, которые отвечают за ввод и вывод в текстовый файл. Поэтому многие рассмотренные возможности форматированного ввода-вывода будут использоваться и при обработке текстовых файлов.
Существует два основных типа файлов: текстовые и двоичные. Файлы позволяют пользователю считывать большие объёмы данных непосредственно с диска, не вводя их с клавиатуры.