Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не Qt, Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.
|
Организация ввода-вывода в C++
7.1 Форматированный ввод-вывод в C++
Для управления вводом-выводом в C++ используются:
- флаги форматного ввода-вывода;
- манипуляторы форматирования.
7.1.1 Использование флагов форматного ввода-вывода
Флаги позволяют включить или выключить один из параметров вывода на экран. Для установки флага вывода используется следующая конструкция языка C++:
cout.setf(ios::flag)
Для снятия флага применяют конструкцию
cout.unsetf(ios::flag)
здесь flag — имя конкретного флага.
Если при выводе необходимо установить несколько флагов, то можно воспользоваться арифметической операцией "или" (|). В этом случае конструкция языка C++ будет такой:
cout.setf(ios::flag1|ios::flag2|ios::flag3)
В данном случае flag1, flag2, flag3 — имена устанавливаемых флагов вывода.
В табл. 7.1 приведены некоторые флаги форматного вывода с примерами их использования.
Флаг | Описание | Пример использования1cout.width(n) устанавливает ширину поля вывода, подробнее об этом в п. 7.1.2 | Результат |
---|---|---|---|
right | Выравнивание по правой границе |
int r=-25; cout. setf ( ios :: right ); cout.width(15); cout<<"r="<<r<<endl; |
r=-25 |
left | Выравнивание по левой границе (по умолчанию) |
double r=-25.45; cout. setf ( ios :: left ); cout.width(50); cout<<"r="<<r<<endl; |
r=-25.45 |
boolalpha | Вывод логических величин в текстовом виде (true, false) |
bool a=true; cout<<a<<endl; cout. setf ( ios :: boolalpha); cout<<a<<endl; |
true |
dec | Вывод величин в десятичной системе счисления (по умолчанию) |
int r=-25; cout<<"r="<<r<<endl; |
r=-25 |
oct | Вывод величин в восьмеричной системе счисления |
int p=23; //Отменить, установленный по умолчанию, вывод в десятичной системе счисления cout.unsetf( ios :: dec); //Установить вывод в восьмеричной системе счисления cout. setf ( ios :: oct); cout<<"p="<<p<<endl; |
p=27 |
hex | Вывод величин в шестнадцатеричной системе счисления |
int p=23; //Отменить, установленный по умолчанию, вывод в десятичной системе счисления cout.unsetf( ios :: dec); //Установить вывод в шестнадцатеричной системе счисления cout. setf ( ios :: hex); cout<<"p="<<p<<endl; |
p=17 |
showbase | Выводить индикатор основания системы счисления |
int p=23; cout.unsetf( ios :: dec); cout. setf ( ios :: hex| ios :: showbase); cout<<"p="<<p<<endl; |
p=0x17 |
uppercase | Использовать прописные буквы в шестнадцатеричных цифрах |
int p=29; cout.unsetf( ios :: dec); cout. setf ( ios :: hex| ios :: uppercase); cout<<"p="<<p<<endl; |
p=1D |
showpos | Выводить знак "+" для положительных чисел |
int p=29; cout. setf ( ios :: showpos); cout<<"p="<<p<<endl; |
p=+29 |
scientific | Экспоненциальная форма вывода вещественных чисел |
double p=146.673; cout. setf ( ios :: scientific ); cout<<"p="<<p<<endl; |
p=1.466730e+002 |
fixed | Фиксированная форма вывода вещественных чисел (по умолчанию) |
double p=146.673; cout. setf ( ios :: fixed ); cout<<"p="<<p<<endl; |
p=146.673 |
Флаги удобно использовать в тех случаях, когда следует изменить параметры всех последующих операторов ввода-вывода. Использование большого количества флагов для управления одним или несколькими операторами ввода-вывода не совсем удобно, потом все установленные флаги придётся отключать.
Ещё одним способом форматирования является использование манипуляторов непосредственно в конструкциях cin и cout.