ncurses中的变量坐标不起作用

时间:2014-07-31 17:10:52

标签: c variables ncurses

我正在学习C,并决定看看ncurses。我正在编写一个在屏幕上移动@的程序。如果我为起始坐标指定数字,那么一切都有效,但是如果我尝试使用在开始时居中@的变量坐标,那么@ just就不会出现。

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

int main() {
    int x, y, c, height, width;

    initscr();

    getmaxyx(stdscr, height, width);
    x = width/2;
    y = height/2;

    mvprintw(x, y, "@");

    keypad(stdscr, TRUE);
    curs_set(0);
    while(1) {
        c = wgetch(stdscr);
        switch(c) {
            case KEY_DOWN:
                clear();
                ++x;
                mvprintw(x, y, "@");
                refresh();
                break;
            case KEY_UP:
                clear();
                --x;
                mvprintw(x, y, "@");
                refresh();
                break;
            case KEY_RIGHT:
                clear();
                mvprintw(x, y, "@");
                refresh();
                break;
            case KEY_LEFT:
                clear();
                --y;
                mvprintw(x, y, "@");
                refresh();
                break;
            }
        }

    return 0;
}


int center() {
    int x, y, width, height;
    getmaxyx(stdscr, width, height);
    x = width/2;
    y = height/2;
    return x, y;
}

1 个答案:

答案 0 :(得分:0)

man mvwprintw

   int mvprintw(int y, int x, const char *fmt, ...);

注意x和y的位置。

此外,您的代码不一致。

x = width/2;

[...]

case KEY_DOWN:
            clear();
            ++x;
            mvprintw(x, y, "@");
            refresh();
            break;