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

问题描述 投票:0回答:1

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

c ncurses
1个回答
0
投票

看来这个问题在Linux子系统Linux中是独一无二的,我首先遇到了这个问题。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.