簡體   English   中英

在Linux中顯示C程序的輸出時控制光標

[英]Controlling the cursor while displaying the output of a C program in Linux

我正在編寫要在Linux終端上執行的C程序。 程序進入無限循環並反復打印五行。 如何使光標回到前幾行?

例如,我想打印字母並每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? 還是有更簡單的方法來做到這一點?

詛咒

您需要一個curses庫,例如ncurses

沒有簡單的方法可以做您想要的。 stdout視為無法拉回的連續紙。 一旦您打印了一行,就是這樣。 對該行沒有更多更改。

您可以通過使用標准未定義的特定庫(通常是curses)將“ stdout”轉換為另一種打印機。

在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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM