Windows Cmd: не удается правильно получить вводимый символ

Я не могу правильно получить значение вводимого символа. Вот мой код:

#include <stdlib.h>
void main()
{
    char buf_in[32] = { 0 };
    printf("input: ");
    gets_s(buf_in, 32);
    for (int i = 0; i < 32; i++)
        printf("%02x ", buf_in[i]);
    getchar();
}

Я ввожу символ с помощью <alt-254>, но результат 74 00 00 ..., а не fe 00 00 ....

Вот моя локальная среда: chcp 936.

И я тестирую в различных локальных средах (кодовая страница ANSI 936):
1. Кодовая страница OEM 936 результат: 74 00 00 ...
2. Кодовая страница OEM 65001 результат: 00 00 00 ... (странно)
3. Кодовая страница OEM 1250 результат: 3f 00 00 ...
4. OEM кодовая страница 437 результат: 5f 00 00 ...


person dcnh35    schedule 21.11.2016    source источник
comment
Как насчет unsigned char вместо char. Вот статья. stackoverflow.com/questions/4337217/   -  person user2443447    schedule 21.11.2016
comment
@ user2443447 нет, не работает   -  person dcnh35    schedule 22.11.2016
comment
Перепробовал практически все способы ввода; ближайшим к нему, похоже, является std::wcin или wscanf из потока Как использовать Unicode в C ++?  -  person JosefZ    schedule 22.11.2016


Ответы (1)


Я думаю, что ALT-коды не поддерживаются консолью Windows. Пожалуйста, посмотрите здесь: Альтернативные коды в пакетном режиме

Вы можете попробовать поместить ALT-код (или любые другие данные ...) в файл, а затем перенаправить ввод в вашу программу:

./prog.exe ‹input.txt

Чтобы убедиться, что вы указали правильное значение в файле, я предлагаю использовать шестнадцатеричный редактор (например, XVI32).

Это работает для других персонажей?

person Mazi    schedule 21.11.2016
comment
Неа. ALT-коды поддерживаются консолью Windows. Может быть, использование wchar вместо char может помочь? - person JosefZ; 21.11.2016