我有一个简单的c程序,它首先打印与用户机器相关的信息:
Header Info 1
Header Info 2
Header Info 3
然后我打印与上述相关的数据列:
XX XX XX XX XX
XX XX XX XX XX
XX XX XX XX XX
XX XX XX XX XX
...
我想要的是保持顶部标题信息到位,然后在其下连续打印其余数据。这样,标题信息不会滚动到屏幕顶部。最简单的方法是什么?
编辑:我在linux上。
答案 0 :(得分:1)
根据您的一般描述,您可以执行以下操作。
#include <stdlib.h>
#include <signal.h>
#include <curses.h>
static int quit_flag;
void sigint_handler (int sig) {
quit_flag = 1;
}
int main () {
int i;
WINDOW *w;
signal(SIGINT, sigint_handler);
w = initscr();
scrollok(w, 1);
wsetscrreg(w, 4, LINES-1);
wprintw(w, "%s\n", "Info 1");
wprintw(w, "%s\n", "Info 2");
wprintw(w, "%s\n", "Info 3");
wprintw(w, "%s\n", "Info 4");
wrefresh(w);
i = 0;
wsetscrreg(w, 4, LINES-1);
while (++i) {
wprintw(w, "%d\n", i);
wrefresh(w);
if (quit_flag) break;
}
endwin();
return 0;
}
答案 1 :(得分:0)
建议的答案有几个问题:
initscr
部分。这是更正版本:
#include <curses.h>
int main (void) {
int i;
WINDOW *w;
w = initscr();
scrollok(w, 1);
wsetscrreg(w, 4, LINES-1);
wprintw(w, "%s\n", "Info 1");
wprintw(w, "%s\n", "Info 2");
wprintw(w, "%s\n", "Info 3");
wprintw(w, "%s\n", "Info 4");
wrefresh(w);
i = 0;
while (++i) {
wprintw(w, "%d\n", i);
wrefresh(w);
}
endwin();
return 0;
}
此外,意识到initscr
的返回值为stdscr
,程序可以简化:
#include <curses.h>
int main (void) {
int i;
initscr();
scrollok(stdscr, 1);
setscrreg(4, LINES-1);
printw("%s\n", "Info 1");
printw("%s\n", "Info 2");
printw("%s\n", "Info 3");
printw("%s\n", "Info 4");
refresh();
i = 0;
while (++i) {
printw("%d\n", i);
refresh();
}
endwin();
return 0;
}