0

我正在尝试重绘一个简单循环的内容。到目前为止,它打印到stdscr100 行,然后通过scrl滚动 n 行,我得到 n 个空白行。

我想要的是保持顺序。但是,我不确定如何stdscr用额外的 n 行重新绘制。任何想法将不胜感激!

#include <ncurses.h>
int main(void)
{
    initscr();
    int maxy,maxx,y;
    getmaxyx(stdscr,maxy,maxx);
    scrollok(stdscr,TRUE);
    for(y=0;y<=100;y++)
        mvprintw(y,0,"This is some text written to line %d.",y);
    refresh();
    getch();
    scrl(5);
    refresh();
    getch();
    endwin();
    return(0);
}
4

1 回答 1

0

据推测,在refresh()after 之后scrl(),添加以下行:

for (y = 96; y <= 100; y++)
    mvprintw(y, 0, "This is some text written as line %d.", y+5);
refresh();

当然,我使用的是幻数。你应该使用类似的东西:

enum { MAX_SCR_LINE = 100 };
enum { MAX_SCROLL   =   5 };

然后循环是:

for (y = MAX_SCR_LINE - MAX_SCROLL + 1; y <= MAX_SCR_LINE; y++)
    mvprintw(y, 0, "This is some text written as line %d.", y + MAX_SCROLL);
refresh();

如果你需要一遍又一遍地重复这个过程,那么计算就变成了:

enum { MAX_ITER = 10 };
for (int j = 0; j < MAX_ITER; j++)
{
    scrl(MAX_SCROLL);
    for (y = MAX_SCR_LINE - MAX_SCROLL + 1; y <= MAX_SCR_LINE; y++)
        mvprintw(y, 0, "This is the text written as line %d.",
                 y + (j + 1) * MAX_SCROLL);
 }

等等...

(未经测试的代码 - 当心错误。)

于 2010-03-20T05:54:47.210 回答