私はボックス文字を使用して情報を表示するC ++]プログラムを作成しました。ターミナルアプリを使ってmacOSでプログラムを実行しましたが、うまくいきました。
私が切り替えたときDebian Linux同じコードを使用して再コンパイルしたところ、この問題が発生しました!オンラインで回答を検索しましたが、この質問に関連する回答が見つかりませんでした。私はこれを両方でテストしましたLX端子そして URXVT。
以下は、この問題に対して再現可能な最小限の例です。
#include <ncurses.h>
#include <iostream>
int ch;
int main() {
setlocale(LC_CTYPE, "");
initscr();
noecho();
keypad(stdscr, true);
nodelay(stdscr, true);
curs_set(0);
start_color();
use_default_colors();
init_pair(1, COLOR_BLUE, -1);
clear();
refresh();
while ((ch = getch()) != 'q' && ch != 'Q') {
attrset(COLOR_PAIR(1));
mvprintw(0,0,"┏━┓");
mvprintw(1,0,"┗━┛");
}
refresh();
endwin();
return 0;
}
次のコマンドを使用してこのデモをコンパイルします。
g++ -g -c -o main.o test.cpp && g++ -g -o test main.o -std=c++11 -Wall -pedantic -lncurses
または
LDLIBS=-lncurses make test
表示する代わりに
┏━┓
┗━┛
次のように表示されます。
M-b~T~OM-b~T~AM-b~T~S
M-b~T~WM-b~T~AM-b~T~[
実際の画面イメージ
macOSの一般(必須)表示:
Linuxでは例外が表示されます。
ベストアンサー1
問題は、別の記号を使用するのではなく、リテラル文字、、、、、を┌
使用─
していることです。 (pper / owerとeft / ight)とシンボル名を使用する必要があり、端末でこれらの名前を表す方法を学びましょう。┐
└
─
┘
ncurses
ACS_??CORNER
U
L
L
R
ACS_HLINE
ncurses
ここでコードを修正してください。
mvprintw(0,0,"┏━┓");
mvprintw(1,0,"┗━┛");
これに関して、
move(0,0); addch(ACS_ULCORNER); addch(ACS_HLINE); addch(ACS_URCORNER);
move(1,0); addch(ACS_LLCORNER); addch(ACS_HLINE); addch(ACS_LRCORNER);
コードは移植可能に動作する必要があります。また、プログラム終了時に端末が正しくリセットされるように、プログラムmain()
の終了を単純から次のように変更しました。return 0
endwin();
exit(0);
コンパイルtest.cpp
して実行し、
LDLIBS=-lncurses make test && ./test
特別な順序なしで便利な参考資料: