Расширенные символы ncurses.h не отображаются должным образом в c - PullRequest
1 голос
/ 04 марта 2020

Я пытаюсь настроить мою программу, используя расширенные символы ncurses. Однако некоторые из них отображаются в виде вопросительного знака в поле: box. Это происходит, когда я пытаюсь использовать такие функции, как:

addch(ACS_S1);
addch(ACS_LANTERN);
addch(ACS_S3);

и так далее. Любая помощь будет оценена.

#include <ncurses.h>

int main()
{
  initscr();

  addch(ACS_S1);
  addch(ACS_S3);
  addch(ACS_S7);
  addch(ACS_S9);
  addch(ACS_LANTERN);

  refresh();
  getch();
  endwin();

  return 0;
}

edit: я забыл добавить пример кода. Поэтому я добавил его на этот раз: я использую Ubuntu для компиляции своего кода

1 Ответ

0 голосов
/ 05 марта 2020

Вы забыли рассказать ncurses, что такое локаль (и если вы не скомпилировали / связали с ncursesw, все еще существуют некоторые ограничения ):

Библиотека использует локаль, которую инициализировала вызывающая программа. Обычно это делается с помощью setlocale:

setlocale(LC_ALL, "");

Если языковой стандарт не инициализирован, библиотека предполагает, что символы могут быть напечатаны, как в ISO-8859- 1, для работы с некоторыми устаревшими программами. Вы должны инициализировать локаль и не полагаться на определенные c подробности библиотеки, когда локаль не была настроена.

...