0

Консоль отображает русский язык нормально, но при вводе с клавиатуры русских букв

ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ

йцукенгшщзхъфывапролджэячсмитьбю

Записывает их так:

Использую getchar. Не могу понять в чём проблема. Насколько помню раньше такого не было. Нашел решение проблемы в виде:

#include <windows.h>

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

Но это из-за этого консоль теперь становится нечитабельной, а текст введённый в консоль отображается в Visual Studio нормально. Ввод:

char* InputString(char* charset)
{
    int eIndex = -1;
    charset = nullptr;
    do
    {
        ++eIndex;
        charset = (char*)realloc(charset, (eIndex + 1) * sizeof(char));
        do
        {
            charset[eIndex] = getchar();
        } while (charset[eIndex] == '\n' && eIndex == 0);
    } while (charset[eIndex] != '\n' && charset[eIndex] != ' ');
    charset[eIndex] = '\0';
    return charset; 
}

Вывод:

cout << (*results[i]).name
Awethon
  • 57
  • 9
  • 1
    Пожалуйста, покажите код где выполняется ввод и вывод. – Cerbo Mar 11 '16 at 18:35
  • Еще, что показано на скриншоте и как оно настроено в части кодировок? Это явно не стандартный CMD. – Cerbo Mar 11 '16 at 18:39
  • @Cerbo это поле контрольных значений в visual studio. В консоли выводится то же самое, что и в Visual Studio. Код приложил. – Awethon Mar 11 '16 at 18:43
  • Вызовы функций SetConsole* возвращают TRUE? – Cerbo Mar 11 '16 at 19:07
  • Разобрался с функциями SetConsole. Они работают только со шрифтом Lucida Console. И вроде всё работает. Вот только не работает теперь. У меня в программе была сортировка этих текстовых полей. Теперь ввожу например Фарадар Дараб Абв и они сортируются как Дараб Фарадар Абв. Кракозябры сортировались правильно. А вот cp-1251 нет. – Awethon Mar 11 '16 at 19:13
  • Значит вы получаете не cp-1251, в ней русская кириллица идет по порядку. – Cerbo Mar 11 '16 at 19:29
  • @Cerbo всё работает. Из-за паники с локализацией сделал ошибку в алгоритме. Спасибо за наводки. – Awethon Mar 11 '16 at 19:45

0 Answers0