Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Почему чтобы корректно отображались русские буквы в консоли, мало изменить кодировку - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Длинно-плавающая запятая http://www.cyberforum.ru/cpp-beginners/thread705232.html
Я хочу числовой тип с плавающей запятой и очень большим sizeof, стандартного такого нет: sizeof(float)=4. sizeof(double)=8. sizeof(long double)=12., а я хочу на много больше. Например, 1024 байта....
C++ Php и C++ одновремменное изучение Здравствуйте народ у меня вопрос: Возможно ли одновреммено изучать php и c++? И еше как "правильно" изучать ЯП? (просто начал месяц назад учить c++ по книге "Программирование.Принцыпы и практика... http://www.cyberforum.ru/cpp-beginners/thread705226.html
Как одновременно декларировать векторное и скалярное произведение векторов? C++
В обоих случаях умножается вектор на вектор. Нельзя же перегрузить по типу значения.
и еще одна задача на последовательности C++
Вводится последовательность вещественных чисел, оканчивающаяся нулём, и состоящая более чем из одного ненулевого элемента. Определить, образуют ли эта последовательность арифметическую прогрессию.
C++ задача на последовательности никак не получается http://www.cyberforum.ru/cpp-beginners/thread705206.html
Вводится последовательность вещественных чисел, оканчивающаяся нулём, и состоящая более чем из одного ненулевого элемента. Найти разность между суммой четных и нечетных значений.
C++ Организовать текстовый файл, состоящий из N строк. Определить среднее количество символов в строке данного файла Ребятки помогите пожалуйста Добавлено через 1 час 14 минут и ещё одну Дана квадратная матрица порядка N. Вычислить среднее арифметическое положительных элементов матрицы, стоящих выше главной... подробнее

Показать сообщение отдельно
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474

Почему чтобы корректно отображались русские буквы в консоли, мало изменить кодировку - C++

22.11.2012, 09:06. Просмотров 3536. Ответов 31
Метки (Все метки)

Последнее-то что даёт? Имеем:
C++
1
printf ("sы");
на выходе- s<кракозябр> а почему? смотрим, что у нас в экзешнике, там где должно быть "sы". А там таких два байта (ну то есть кодовая таблица 1251 в миниатюре)

s->0X73 ы->0Xfb

Разбираемся, что происходит, при печати. А происходит следующее: мы говорим консоли: "консоль, напечатай два байта 0X73 и 0Xfb" После чего консоль смотрит в СВОЮ таблицу кодировки, вот она:

s->0X73 <кракозябр>->0Xfb

и печатает СООТВЕТСТВЕННО ЕЙ:
C++
1
s<кракозябр>
Чё делать? А давай подменим консольную таблицу кодировки на нужную нам, на 1251. Подменяем:
C++
1
2
 SetConsoleOutputCP(1251);
printf ("sы");
Теперь консоль при печати двух символов смотрит в ту таблицу кодировки, которую мы ей подсунули, видит:

s->0X73 ы->0Xfb

и печатает НЕСООТВЕТСТВЕННО ЕЙ:

C++
1
s<кракозябр>
Гениально. Собсно, на этом можно было бы и остановится. Корректная печать призводится только если к этим действиям добавить ещё и смену шрифта с точечного на Lucida Console. Механизм такой смены мне абсолютно непонятен, таблицу кодировки заменили чё ещё надо? Тем не менее, заменять шрифт необходимо, а почему- неясно. Спасибо, кто объяснит, зачем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru