Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не Qt, Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.
|
Общие сведения о языке С++
2.1 Алфавит языка
Программа на языке С++ может содержать следующие символы:
- прописные, строчные латинские буквы и знак подчёркивания;
- арабские цифры от 0 до 9;
- специальные знаки:
- символы пробела, табуляции и перехода на новую строку.
Из символов алфавита формируют ключевые слова и идентификаторы. Ключевые слова — это зарезервированные слова, которые имеют специальное значение для компилятора и используются только в том смысле, в котором они определены (операторы языка, типы данных и т.п.). Идентификатор — это имя программного объекта, представляющее собой совокупность букв, цифр и символа подчёркивания. Первый символ идентификатора — буква или знак подчёркивания, но не цифра. Идентификатор не может содержать пробел. Прописные и строчные буквы в именах различаются, например, ABC, abc, Abc — три различных имени. Каждое имя (идентификатор) должно быть уникальным в пределах функции и не совпадать с ключевыми словами.
В тексте программы можно использовать комментарии. Если текст начинается с двух символов "косая черта" // и заканчивается символом перехода на новую строку или заключён между символами /* и */, то компилятор его игнорирует.
/* Комментарий может выглядеть так! */ //А если вы используете такой способ, //то каждая строка должна начинаться //с двух символов "косая черта".
Комментарии удобно использовать как для пояснений к программе, так и для временного исключения фрагментов программы при отладке.
2.2 Данные
Для решения задачи в любой программе выполняется обработка каких-либо данных. Данные хранятся в памяти компьютера и могут быть самых различных типов: целыми и вещественными числами, символами, строками, массивами. Типы данных определяют способ хранения чисел или символов в памяти компьютера. Они задают размер ячейки, в которую будет записано то или иное значение, определяя тем самым его максимальную величину или точность задания. Участок памяти (ячейка), в котором хранится значение определённого типа, называется переменной. У переменной есть имя (идентификатор) и значение. Имя служит для обращения к области памяти, в которой хранится значение. Во время выполнения программы значение переменной можно изменить. Перед использованием любая переменная должна быть описана. Оператор описания переменных в языке С++ имеет вид:
тип имя_переменной;
или
тип список_переменных;
Типы данных языка С++ можно разделить на основные и составные.
К основным типам данных языка относят:
- char — символьный;
- int— целый;
- float— с плавающей точкой;
- double — двойной точности;
- bool — логический.
Для формирования других типов данных используют основные типы и так называемые спецификаторы. Типы данных, созданные на базе стандартных типов с использованием спецификаторов, называют составными типами данных. В С++ определены четыре спецификатора типов данных:
- short — короткий;
- long — длинный;
- signed — знаковый;
- unsigned — беззнаковый.
Далее будут рассмотрены назначение и описание каждого типа.
2.2.1 Символьный тип
Данные типа char в памяти компьютера занимают один байт1В кодировке utf-8 каждый символ кириллицы занимает 2 байта.Это связано с тем, что обычно под величину символьного типа отводят столько памяти, сколько необходимо для хранения любого из 256 символов клавиатуры. Символьный тип может быть со знаком или без знака (табл. 2.1).
Тип | Диапазон | Размер |
---|---|---|
char | –128... 127 | 1 байт |
unsigned char | 0... 255 | 1 байт |
signed char | –128... 127 | 1 байт |
Пример описания символьных переменных:
char c, str; //Описаны две символьные переменные.
При работе с символьными данными нужно помнить, что если в выражении встречается одиночный символ, он должен быть заключён в одинарные кавычки.
Например, 'a', 'b', '+', '3'.
Последовательность символов, то есть строка, при использовании в выражениях заключается в двойные кавычки: "Hello!".
2.2.2 Целочисленный тип
Переменная типа int в памяти компьютера может занимать два, четыре или восемь байтов. Это зависит от разрядности процессора.
Диапазоны значений целого типа представлены в таблице 2.2. По умолчанию все целые типы считаются знаковыми, т.е. спецификатор signed можно не указывать.
Тип | Диапазон | Размер |
---|---|---|
int | –2147483647...2147483647 | 4 байта |
unsigned int | 0...4294967295 | 4 байта |
signed int | –2147483647...2147483647 | 4 байта |
short int | –32767...32767 | 2 байта |
long int | –2147483647...2147483647 | 4 байта |
unsigned short int | 0...65535 | 2 байта |
signed short int | –32767...32767 | 2 байта |
long long int | –(263–1)...(263–1) | 8 байт |
signed long int | –2147483647...2147483647 | 4 байта |
unsigned long int | 0...4294967295 | 4 байта |
unsigned long long int | 0...264–1 | 8 байт |
Пример описания целочисленных данных:
int a, b, c; unsigned long int A, B, C;
2.2.3 Вещественный тип
Внутреннее представление вещественного числа в памяти компьютера отличается от представления целого числа. Число с плавающей точкой представлено в экспоненциальной форме , где — мантисса (целое или дробное число с десятичной точкой), — порядок (целое число). Для того чтобы перевести число в экспоненциальной форме к обычному представлению с фиксированной точкой, необходимо мантиссу умножить на десять в степени порядок. Например,
Обычно величины типа float занимают 4 байта, из которых один двоичный разряд отводится под знак, 8 разрядов под порядок и 23 под мантиссу. Поскольку старшая цифра мантиссы всегда равна 1, она не хранится.
Величины типа double занимают 8 байт, в них под порядок и мантиссу отводится 11 и 52 разряда соответственно. Длина мантиссы определяет точность числа, а длина порядка его диапазон. Спецификатор типа long перед именем типа double указывает, что под величину отводится 10 байт.
Диапазоны значений вещественного типа представлены в табл. 2.3.
Тип | Диапазон | Размер |
---|---|---|
float | 3.4Е-38...3.4E+38 | 4 байта |
double | 1.7Е-308...1.7E+308 | 8 байт |
long double | 3.4Е-4932...3.4E+4932 | 10 байт |
Пример описания вещественных переменных:
double x1, x2, x3; float X, Y, Z;
2.2.4 Логический тип
Переменная типа bool может принимать только два значения true (истина) или false (ложь). Любое значение не равное нулю интерпретируется как true, а при преобразовании к целому типу принимает значение равное 1. Значение false представлено в памяти как 0.
Пример описания данных логического типа:
bool F, T;
2.2.5 Тип void
Множество значений этого типа пусто. Он используется для определения функций, которые не возвращают значения, для указания пустого списка аргументов функции, как базовый тип для указателей и в операции приведения типов.