[英]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.