使用ncurses从文件中打印ascii艺术行为很奇怪

时间:2019-04-01 10:52:16

标签: c ncurses

我正在尝试使用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,原因相似。但是,问题的特征不同,因此是单独的问题。

1 个答案:

答案 0 :(得分:0)

这个问题似乎在Linux的Windows子系统中是唯一的,我是第一次遇到这个问题。

同一脚本在Linux中可以100%正常运行,但在Linux的Windows子系统中则不能。

使其在WSL中工作的一种解决方法是在打印每个字符wrefresh(startScreen)之后刷新窗口。但是,根本原因仍然未知。