Я пишу приложение, используя ncurses, и хочу использовать в нем символы рисования прямоугольников, в частности u / 2550 и u / 2551 (на данный момент).У меня есть для настройки петель, чтобы рисовать столбцы с двух сторон терминала, исходя из размера экрана, который я определяю в другом месте.
По любой причине, когда дело доходит до рисования любых символов Юникода по горизонтали (здесь, внизу экрана,но он делает это в любой строке), он перейдет от печати символов в порядке к печати мусора 'P's.Это немного сложно объяснить, поэтому у меня есть несколько фотографий, показывающих, что происходит, когда я рисую 6 символов, а затем 7 или более символов.
![With 6 characters](https://i.stack.imgur.com/NDCL6.png)
![With 7 characters](https://i.stack.imgur.com/XStSl.png)
Часть кода, ответственная за рисование этих символов, как таковая, обратите внимание, что последний цикл for - это то, что рисует эти символы, и итератор должен идти дальше, чем просто7, но он делает это здесь и в любом другом месте.
void drawBorder(){ //draw the border graphics
attron(COLOR_PAIR(3));
for(int i = 1; i < screenSizeY - 1; i++){ //draw left side
mvaddwstr(i, 0, L"║");
}
for(int i = 1; i < screenSizeY - 1; i++){ //draw right side
mvaddwstr(i, screenSizeX - 1, L"\u2551");
}
for(int i = 0; i < 7; i++){ //draw bottom
mvaddwstr(screenSizeY - 1, i, L"\u2550");
}
attroff(COLOR_PAIR(3));
}
Я связываюсь с пакетом ncursesw и у меня правильно настроен языковой стандарт.Другие символы, нарисованные вертикальными линиями, работают нормально, но это не так.Я использую C ++, скомпилированный с g ++, работающий на Linux в терминальной сессии Alacritty.
Это не имеет ничего общего с функциями рисования блоков или определенными возможностями терминала, все широкие символы отлично поддерживаются терминалом,и работать в других частях терминала.Это произойдет в зависимости от того, сколько из них я нарисовал подряд, а также для других символов ящика.