c - 我在 ncurses 中的窗口不显示任何内容

标签 c debian ncurses

我最近在我的项目中使用 ncurses,我是新手。 我写了一个代码来在一个窗口中打印我的宇宙飞船(3 条字符串线),但它没有显示任何我用来在新窗口中打印飞船和其他用于删除 windows() 的功能。这是我的代码:

#include<stdio.h>
#include<ncurses.h>
#include <string.h>
#include<stdlib.h>


WINDOW * create_newwin(int height, int width, int starty, int startx);

void destroy_win(WINDOW *local_win);

int main(int argc, char *argv[]){

   WINDOW* space_ship;
   int max_y , max_x , startx , starty;
   char ch;

   initscr();
   cbreak();
   noecho();

   getmaxyx(stdscr,max_y,max_x);
   startx=(LINES - 3) / 2;
   starty=(COLS - 5) / 2;
   space_ship=create_newwin(3,5,starty,starty);
   refresh();

   while((ch = getch()) != 'q')
   { switch(ch)
       { case KEY_LEFT:
               destroy_win(space_ship);
               space_ship = create_newwin(3,5, starty,--startx);
               break;
           case KEY_RIGHT:
               destroy_win(space_ship);
               space_ship = create_newwin(3, 5, starty,++startx);
               break;
           case KEY_UP:
               destroy_win(space_ship);
               space_ship = create_newwin(3, 5,--starty,startx);
               break;
           case KEY_DOWN:
               destroy_win(space_ship);
               space_ship = create_newwin(3, 5, ++starty,startx);
               break;
       }
   }

   endwin();

   return 0;
  }

WINDOW *create_newwin(int height, int width, int starty, int startx){
   WINDOW* temp;
   temp=newwin(height,width,starty,startx);
   refresh();
   wprintw(temp,"  ^\n");
   wprintw(temp," (0)\n");
   wprintw(temp,"[] []\n");
   wrefresh(stdscr);
   wrefresh(temp);

return temp;

}

void destroy_win(WINDOW *local_win){

   wborder(local_win, ' ', ' ', ' ',' ',' ',' ',' ',' ');
   wrefresh(local_win);
   delwin(local_win);
}

最佳答案

问题是这一行:

  while((ch = getch()) != 'q')

正在从 stdscr 读取,而您想在 space_ship 上写入文本。如果你把它改成

  while((ch = wgetch(space_ship)) != 'q')

然后 space_ship 的刷新将作为 wgetch 调用的副作用完成。

关于c - 我在 ncurses 中的窗口不显示任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37900959/

相关文章:

c - 关于使用 while to "embrace"我的代码而不是调用 main() 的另一个问题

networking - 在 Ubuntu 10.04 网络准备好后如何强制启动服务?

c - 用C编写命令行shell;第一次尝试使用 ncurses/C

c - 在 c 中,控制编译器如何将相同字符串合并到可执行文件中的规则是什么

c - 在 C 中解析 .txt 文件

php - Mysql子日期查询: retrieve records from yesterday/last week/etc

php - CAKEPHP 帮助在 ubuntu 中运行项目

Haskell `ncurses` 库

c - ncurses 屏幕上的多种颜色

c - 多数 - 如果票数相等,如何打印多个获胜者?