在Linux中显示C程序的输出时控制光标

时间:2010-09-20 22:34:10

标签: c linux

我正在编写一个在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?或者有更简单的方法吗?

4 个答案:

答案 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;
}