Обновление кадра на консоли
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 шт):
Проблема возникает в процессе чтения из файла, а именно в настройке локали для потоковых операций.
Добавьте в начало:
#include <codecvt>
После объявления потока настроим локаль:
wifstream input;
input.imbue(std::locale(std::locale::empty(), new std::codecvt_utf8<wchar_t>));
Возможно вызовы _setmode потребуется вернуть на место.
Должно заработать.
P.S. Пользуйтесь отладчиком, помогает.