Переменные координаты в ncurses не работают

Я изучаю C и решил посмотреть на ncurses. Я пытаюсь написать программу, которая перемещает @ по экрану. Все работает, если я указываю числа для начальных координат, но если я пытаюсь использовать переменные координаты, которые центрируют @ в начале, @ просто не появляется.

#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;
}

person Theodcyning    schedule 31.07.2014    source источник


Ответы (1)


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;
person hymie    schedule 31.07.2014