C- 窗口/打印不出现

标签 c ncurses

伙计们,我不知道为什么窗口边框/打印没有出现。我哪里出错了?它之前一直在工作。我添加了评论括号中看到的部分。即使我删除了这些部件,它也停止工作。

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

int main()
{
    int y = 2;
    int x = 2;
    int oldy = 2;
    int oldx = 2;
    char m = 'l';

    initscr();
    WINDOW* win;
    win = newwin(41,40, 0 ,0);
    /*WINDOW* win2 = newwin(10,10, 40 ,0);*/
    box(win, ACS_VLINE, ACS_HLINE);
    /*box(win2, ACS_VLINE, ACS_HLINE);*/
    mvwprintw(win,1, 1, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
    mvwprintw(win,2, 1, "X X   X     X   X          X       X X");
    mvwprintw(win,3, 1, "X X X X XXX X X X XXXXXXXX X XXXXX X X");
    mvwprintw(win,4, 1, "X X X     X   X X X          X     X X");
    mvwprintw(win,5, 1, "X XXXXXXX XXXXX X X XXXXXXXXXX XXXXX X");
    mvwprintw(win,6, 1, "X       X X     X X          X       X");
    mvwprintw(win,7, 1, "XXXXXXX X XXXXXXX XXXXXXXXXX XXXXXXXXX");
    mvwprintw(win,8, 1, "X       X X       X        X X       X");
    mvwprintw(win,9, 1, "X XXXXXXX X XXXXXXX XXXXXX   X XXXXX X");
    mvwprintw(win,10, 1, "X X       X X             XXXX X X   X");
    mvwprintw(win,11, 1, "X X XXXXX X XXXX XXXXXXXX      X X XXX");
    mvwprintw(win,12, 1, "X X X     X XXXX X       XXXXXXX X X X");
    mvwprintw(win,13, 1, "X   X XXX X    X X XXXXX X   X X   X X");
    mvwprintw(win,14, 1, "XXXXX X X XXXX X   X   X X X X XXXXX X");
    mvwprintw(win,15, 1, "X     X X X    XXXXX X X X X X     X X");
    mvwprintw(win,16, 1, "X XXXXX X X XXXX     X X X X XXXXX X X");
    mvwprintw(win,17, 1, "X X     X X    X XXXXX     X         X");
    mvwprintw(win,18, 1, "X X XXXXX XXXX X X   XXXXXXXXXXXXXXXXX");
    mvwprintw(win,19, 1, "X   X          X   X                 O");
    mvwprintw(win,20, 1, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
    wmove(win,2,2);
    wrefresh(win);
    /*wrefresh(win2);*/


    while(m != 'q')
    {
            /*mvwprintw(win2,41,0,"22");*/
            /*wrefresh(win2);*/
            m=getch();
            /*mvwprintw(win2,40,0,"Please use the following keys to navigate through the maze.(W) Up (S) Down (D) Right (A) Left");*/
            wrefresh(win);

    switch(m)
        {
            case 'S': if(mvwinch(win,(oldy+1),x)=='X')
                        {
                        mvwprintw(win,40,0,"Sorry, you cant move there.");  
                        wrefresh(win);
                        wmove(win,oldy,oldx);
                        wrefresh(win);
                        }

                      else
                        {
                        wmove(win,(y=oldy+1),x);
                        wrefresh(win);
                        oldy = y;
                        }
                break;

            case 'D': if(mvwinch(win,y,(oldx+1))=='X')
                        {
                        mvwprintw(win,40,0,"Sorry, you cant move there.");  
                        wrefresh(win);
                        wmove(win,oldy,oldx);
                        wrefresh(win);
                        }

                      else
                        {
                        wmove(win,y,x=(oldx+1));
                        wrefresh(win);
                        oldx = x;
                        }
                break;

            case 'A': if(mvwinch(win,y,(oldx-1))=='X')
                        {
                        mvwprintw(win,40,0,"Sorry, you cant move there.");  
                        wrefresh(win);
                        wmove(win,oldy,oldx);
                        wrefresh(win);
                        }

                      else
                        {
                        wmove(win,y,x=(oldx-1));
                        wrefresh(win);
                        oldx = x;
                        }
                break; 

            case 'W': if(mvwinch(win,(oldy-1),x)=='X')
                        {
                        mvwprintw(win,40,0,"Sorry, you cant move there.");  
                        wrefresh(win);
                        wmove(win,oldy,oldx);
                        wrefresh(win);
                        }

                      else
                        {
                        wmove(win,y=(oldy-1),x);
                        wrefresh(win);
                        oldy = y;
                        }   
                break;

            default: m = 'q';

        }

    }

    delwin(win);
    /*delwin(win2);*/
    endwin();

    return 0;
}

最佳答案

您打印的所有内容都在 win 中,但 getch()stdscr(默认全屏窗口)读取。从 stdscr 读取会导致它跳到窗口堆栈的顶部,从而遮盖您的 win

使用wgetch(win)

关于C- 窗口/打印不出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24684740/

相关文章:

c - 在主函数之前使用预处理器时显示错误

c - 在C中的嵌套 block 中重新声明标识符

linux - 为什么 ld 找不到 libcurses.so,即使它在 `/usr/lib` 目录中?

c - 如何返回一个字符串地址,然后将其分配给一个新的字符串?

c - 如何计算素数

c - 吃 bean 的搜索算法

c - 屏幕上没有字符发送到 Ncurses pad

python - 使用 Python Urwid/NCurses 在终端应用程序中创建水平和垂直可滚动表

c - 在循环中执行 initscr() 会导致错误初始化

ncurses - 在 ncurses 中,属性 A_PROTECT 有何作用?