我正在编写一个在Linux终端上执行的C程序。程序进入无限循环,一遍又一遍地打印五行。如何将光标恢复到前一行?
E.g。我想打印字母并每隔15秒更换一次。 因此,在T = 0时,输出为
sh>./a.out
AA
BB
CC
DD
EE
在T = 15时,输出
sh>./a.out
FF
GG
HH
II
JJ
我尝试在STDOUT上使用lseek使其覆盖以前的文本。但我猜终端不支持lseek。 我是否需要修改驱动程序API?或者有更简单的方法吗?
答案 0 :(得分:2)
请参阅curses。
答案 1 :(得分:2)
您需要curses
库,例如ncurses。
答案 2 :(得分:1)
没有简单的方法可以做你想做的事。将stdout
视为一张无法撤回的连续纸张。一旦你打印出一条线,那就是它。不再对该行进行任何更改。
您可以通过使用标准未定义的特定库(常见的curses)将“stdout”转换为其他类型的打印机。
答案 3 :(得分:1)
在Linux终端中运行,你应该能够使用'\ r'字符,这是一个回车符(没有新行)。它会覆盖之前的内容。
尝试类似:
#include <stdio.h>
int main(void)
{
printf("AA BB CC");
fflush(stdout);
sleep(3);
printf("\rDD EE FF");
fflush(stdout);
sleep(3);
printf("\n");
return 0;
}
有了这个,你应该能够在循环中做任何你想做的事......
使用ncurses编辑...
#include <stdio.h>
#include <ncurses.h>
int main(void)
{
initscr();
noecho();
raw();
printw("AA\nBB\nCC\n");
refresh();
sleep(3);
mvwprintw(stdscr, 0, 0, "DD\nEE\nFF\n");
refresh();
sleep(3);
endwin();
return 0;
}