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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Длинно-плавающая запятая http://www.cyberforum.ru/cpp-beginners/thread705232.html
Я хочу числовой тип с плавающей запятой и очень большим sizeof, стандартного такого нет: sizeof(float)=4. sizeof(double)=8. sizeof(long double)=12., а я хочу на много больше. Например, 1024 байта. Пусть это будет класс, внутреннее представление - массив байтов. Как принято хранить порядок? Какое лучше взять основание порядка? 2? 10? 16? 256? 2^n, где n - количество бит в байте, не привязываясь...
C++ Php и C++ одновремменное изучение Здравствуйте народ у меня вопрос: Возможно ли одновреммено изучать php и c++? И еше как "правильно" изучать ЯП? (просто начал месяц назад учить c++ по книге "Программирование.Принцыпы и практика использования C++" и дошел тока до 4 главы) 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
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
22.11.2012, 09:06     Почему чтобы корректно отображались русские буквы в консоли, мало изменить кодировку
Последнее-то что даёт? Имеем:
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. Механизм такой смены мне абсолютно непонятен, таблицу кодировки заменили чё ещё надо? Тем не менее, заменять шрифт необходимо, а почему- неясно. Спасибо, кто объяснит, зачем.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 07:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru