Отображение акцентированных символов с помощью pdcurses

#include <curses.h>

int main(){

    initscr();

    for(int i = -128; i < 128; ++i)
        addch(i);

    getch();
    endwin();

}

введите описание изображения здесь

Pdcurses отображает пробелы для символов от -128 до 0 (от 128 до 255). Есть ли способ, чтобы, по крайней мере, акцентированные символы, такие как é, отображались правильно? iostream не имеет проблем

int main(){

    for(int i = -128; i < 128; ++i)
    std::cout << char(i);

}

введите описание изображения здесь

Я скомпилировал pdcurses с широким набором символов и поддержкой UTF, хотя в любом случае это не проблема, верно? (Поскольку нужные символы содержатся в пределах 0-255, и с помощью add_wch вместо этого не решил проблему в любом случае).

Windows 10 64-битная с g++ 6.1.0.

1 ответ

Решение

Я очень глупый. addch принимает значение типа chtype, Документация не слишком ясна о фактическом типе chtype кроме того, что представляет символы. Смотря на curses.h Я вижу, что chtype имеет тип unsigned long, Так что негатив i значения были приведены к unsigned и, следовательно, обтекание, заставляя проклятия печатать символы, для которых им не назначено представление ASCII. Я также заблудился, потому что этот, казалось бы, похожий код без отрицательных значений дал тот же результат:

int main(){

    initscr();

    for(int i = 0; i < 255; ++i)
        addch(char(i));

    getch();
    endwin();

}

Пока я не вспомнил, что char по умолчанию может быть подписан, и так char(i) конечно оборачивается, чтобы стать отрицательным, прежде чем addch называется.

Другие вопросы по тегам