我正在尝试使用ncurses将ascii art(存储在单独的文件中)打印到终端。
这是我的C代码:
#include <ncurses.h>
#include <string.h>
int main() {
initscr();
raw();
WINDOW * startScreen = newwin(20, 70, 0, 0);
curs_set(FALSE);
start_color();
init_pair(1, COLOR_WHITE, COLOR_BLACK);
attron(COLOR_PAIR(1));
/** (READS AND PRINTS THE FILE HERE, DESCRIPTION BELOW) **/
wrefresh(startScreen);
attroff(COLOR_PAIR(1));
wgetch(startScreen);
endwin();
}
上面的代码读取文件的内容,如果文件中的字符是#
,则打印块字符。 (按字符打印文件的类型)所有内容都打印在startScreen
,一个独立的窗口。
这是文件的内容:
## ## ###### ###### ###### ###### ## ########
### ### ## ## ## ## ## ## ## ##
######### ## ## ## ## ## ##
## ### ## ## ###### ###### ## ## ######
## # ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ##
## ## ###### ###### ###### ###### ######## ########
##### ###### ## ## ## ## ### ## ## ######
## ## ## ## ### ### ### ### ## ## ### ## ## ##
## ## ## #### #### #### #### ## ## #### ## ## ##
## ## ## ## ### ## ## ### ## ## ## ####### ## ##
## ## ## ## # ## ## # ## ######## ## #### ## ##
## ## ## ## ## ## ## ## ## ## ## ### ## ##
##### ###### ## ## ## ## ## ## ## ## ######
但是,当我运行C代码时,它给出了:
▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒
▒▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒
▒▒ ▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒ ▒
▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒▒ ▒▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒▒▒ ▒▒▒▒ ▒▒▒▒ ▒▒▒▒ ▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒ ▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒ ▒▒ ▒▒ ▒ ▒▒ ▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒
▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒
我完全不知道为什么会有块丢失。它为什么会这样?
还有另一个类似原因的question。但是,问题的特征是不同的,因此是一个单独的问题。
看来这个问题在Linux子系统Linux中是独一无二的,我首先遇到了这个问题。
相同的脚本在Linux中可以100%正常运行,但在Windows的Solaris子系统中则不行。
使其在WSL中工作的解决方法是在打印每个字符wrefresh(startScreen)
后刷新窗口。然而,根本原因仍然未知。