0

単純なループの内容を再描画しようとしています。stdscrこれまでのところ、 100行に出力され、scrln行をスクロールするために使用すると、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

おそらく、afterのrefresh()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 に答える