Обновление кадра на консоли

https://pastebin.com/mG5af2HL - тут весь код

Пытаюсь реализовать двойную буферизацию при обновлении кадра на консоли. В файлах находятся отдельные кадры анимации.

Содержимое всех файлов храню в векторе data. Когда итерируюсь по очередному кадру анимации, вывожу только те символы, на месте которых в прошлом кадре стояли другие символы:

            if(data[i][j][k] != v[j][k]){ // вектор v хранит прошлый кадр

                setCursorPosition(j, k);
                wcout << data[i][j][k];
                Sleep(100);

            }

Но все выводится криво. Где я ошибся?

И ещё, когда кадры храню не в файлах, а непосредственно в векторе, то все выводится нормально: https://pastebin.com/K63fYPnN

https://dropmefiles.com/wXfqC - сами файлы


Ответы (1 шт):

Автор решения: Laukhin Andrey

Проблема возникает в процессе чтения из файла, а именно в настройке локали для потоковых операций.

Добавьте в начало:

#include <codecvt>

После объявления потока настроим локаль:

wifstream input;
input.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));

Возможно вызовы _setmode потребуется вернуть на место. Должно заработать.

P.S. Пользуйтесь отладчиком, помогает.

→ Ссылка