使用 ncurses 从文件中打印 ascii 艺术作品很奇怪
using ncurses to print ascii art from file acts strangely
我正在尝试使用 ncurses 将存储在单独文件中的 ascii 艺术打印到终端。
这是我的 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
中,一个独立的 window.
文件内容如下:
## ## ###### ###### ###### ###### ## ########
### ### ## ## ## ## ## ## ## ##
######### ## ## ## ## ## ##
## ### ## ## ###### ###### ## ## ######
## # ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ##
## ## ###### ###### ###### ###### ######## ########
##### ###### ## ## ## ## ### ## ## ######
## ## ## ## ### ### ### ### ## ## ### ## ## ##
## ## ## #### #### #### #### ## ## #### ## ## ##
## ## ## ## ### ## ## ### ## ## ## ####### ## ##
## ## ## ## # ## ## # ## ######## ## #### ## ##
## ## ## ## ## ## ## ## ## ## ## ### ## ##
##### ###### ## ## ## ## ## ## ## ## ######
然而,当我 运行 C 代码时,它给出了这个:
▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒
▒▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒
▒▒ ▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒ ▒
▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒▒ ▒▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒▒▒ ▒▒▒▒ ▒▒▒▒ ▒▒▒▒ ▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒ ▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒ ▒▒ ▒▒ ▒ ▒▒ ▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒
▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒
我完全不知道为什么会缺少方块。为什么会这样?
还有一个 question 具有类似的原因。但是问题的特点不同,所以单独出题。
似乎这个问题在 Linux 的 Windows 子系统中是独一无二的,我第一次遇到这个问题的地方。
相同的脚本在 Linux 中可以 100% 正常工作,但在 Linux 的 Windows 子系统中却不行。
使其在 WSL 中工作的解决方法是在打印每个字符 wrefresh(startScreen)
后刷新 window。然而,根本原因仍然未知。
我正在尝试使用 ncurses 将存储在单独文件中的 ascii 艺术打印到终端。
这是我的 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
中,一个独立的 window.
文件内容如下:
## ## ###### ###### ###### ###### ## ########
### ### ## ## ## ## ## ## ## ##
######### ## ## ## ## ## ##
## ### ## ## ###### ###### ## ## ######
## # ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ##
## ## ###### ###### ###### ###### ######## ########
##### ###### ## ## ## ## ### ## ## ######
## ## ## ## ### ### ### ### ## ## ### ## ## ##
## ## ## #### #### #### #### ## ## #### ## ## ##
## ## ## ## ### ## ## ### ## ## ## ####### ## ##
## ## ## ## # ## ## # ## ######## ## #### ## ##
## ## ## ## ## ## ## ## ## ## ## ### ## ##
##### ###### ## ## ## ## ## ## ## ## ######
然而,当我 运行 C 代码时,它给出了这个:
▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒
▒▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒
▒▒ ▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒ ▒
▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒▒ ▒▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒▒▒ ▒▒▒▒ ▒▒▒▒ ▒▒▒▒ ▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒ ▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒ ▒▒ ▒▒ ▒ ▒▒ ▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒
▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒
我完全不知道为什么会缺少方块。为什么会这样?
还有一个 question 具有类似的原因。但是问题的特点不同,所以单独出题。
似乎这个问题在 Linux 的 Windows 子系统中是独一无二的,我第一次遇到这个问题的地方。
相同的脚本在 Linux 中可以 100% 正常工作,但在 Linux 的 Windows 子系统中却不行。
使其在 WSL 中工作的解决方法是在打印每个字符 wrefresh(startScreen)
后刷新 window。然而,根本原因仍然未知。