[英]C - keeping printed terminal output in place
我有一个简单的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上。
仅根据您的一般描述,您可以执行以下操作。
#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;
}
建议的答案有两个问题:
这是一个更正的版本:
#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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.