【发布时间】:2019-04-01 10:52:16
【问题描述】:
我正在尝试使用 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,一个独立的窗口中。
这是文件的内容:
## ## ###### ###### ###### ###### ## ########
### ### ## ## ## ## ## ## ## ##
######### ## ## ## ## ## ##
## ### ## ## ###### ###### ## ## ######
## # ## ## ## ## ## ## ##
## ## ## ## ## ## ## ## ## ##
## ## ###### ###### ###### ###### ######## ########
##### ###### ## ## ## ## ### ## ## ######
## ## ## ## ### ### ### ### ## ## ### ## ## ##
## ## ## #### #### #### #### ## ## #### ## ## ##
## ## ## ## ### ## ## ### ## ## ## ####### ## ##
## ## ## ## # ## ## # ## ######## ## #### ## ##
## ## ## ## ## ## ## ## ## ## ## ### ## ##
##### ###### ## ## ## ## ## ## ## ## ######
但是,当我运行 C 代码时,它会给出:
▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒
▒▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒
▒▒ ▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒▒▒▒▒ ▒ ▒
▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒▒ ▒▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒▒▒ ▒▒▒▒ ▒▒▒▒ ▒▒▒▒ ▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒ ▒▒ ▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒ ▒▒ ▒▒ ▒ ▒▒ ▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒
▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒ ▒▒ ▒▒
▒▒▒▒▒ ▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒▒▒▒
我完全不知道为什么缺少块。为什么会这样?
还有另一个 question 有类似的原因。但是,问题的特点不同,因此是一个单独的问题。
【问题讨论】:
-
@GabrielLee 也许你的图形文件被巧妙地弄乱了;也许尝试将上面的内容复制/粘贴到一个新的文本文件中。
-
不过,我建议在空格字符的代码中添加另一个
else if,然后else以捕获任何其他字符。 -
@GabrielLee 出于好奇,我复制/编译了您的代码以及 ascii 艺术,它在这里没有问题。一定和你的环境有关。您是否偶然通过串行或其他不安全的通道传输数据?
-
@GabrielLee 好的,很好。但我担心,如果您不对此进行调查,请在此处找出并告诉我们,没有人会这样做;)这可能是时间问题,您可以从在打印字符之间添加一点延迟开始