gpt4 book ai didi

c - "Animated"文本输出

转载 作者:行者123 更新时间:2023-11-30 15:25:17 26 4
gpt4 key购买 nike

像 unix 命令 top 这样的“动画”文本输出是如何工作的?我不确定这个问题的措辞,我的意思是 top 的输出使用固定的空间量,并且文本发生变化而不是附加

如何用 C 语言实现这一点?根据维基百科,top 是用 C 编写的:http://en.wikipedia.org/wiki/Top_%28software%29

最佳答案

Ed Heal 已经向您指出了 ncurses 库。该库允许您在控制台中创建文本窗口,您可以在其中定位光标。

ncurses 软件包在大多数 Unix 机器上都可用,但您可能需要调整包含和库路径。

下面是一个非常粗略的时钟实现。它使用 sleep 来控制动画。

#include <stdlib.h>
#include <stdio.h>
#include <time.h> /* for time and localtime */
#include <unistd.h> /* for sleep */

#include <curses.h> /* might need to adjust -Ipath */

const char *glyph[10] = {
" OOOO OO OOOO OOOO OOOO OOOO OO OOOO ",
" OO OOO OO OO OO OO OOOOOO",
" OOOO OO OO OO OO OO OO OOOOOO",
" OOOO OO OO OO OOO OOOO OO OOOO ",
" OO OOO OOOOOO OOOOOOOO OO OO",
"OOOOOOOO OOOOO OO OOOO OO OOOO ",
" OOOO OO OOOO OOOOO OO OOOO OO OOOO ",
"OOOOOOOO OO OO OO OO OO OO ",
" OOOO OO OOOO OO OOOO OO OOOO OO OOOO ",
" OOOO OO OOOO OO OOOOO OOOO OO OOOO "
};

void showtime(WINDOW *win)
{
time_t now = time(NULL);
struct tm *tm = localtime(&now);

int hh = tm->tm_hour;
int mm = tm->tm_min;
int ss = tm->tm_sec;
int x;
int i;

x = (getmaxx(win) - 54) / 2;
if (x < 0) x = 0;

clear();
for (i = 0; i < 7; i++) {
move(i + 2, x);
printw("%.6s %.6s %.6s %.6s %.6s %.6s",
glyph[hh / 10] + 6*i, glyph[hh % 10] + 6*i,
glyph[mm / 10] + 6*i, glyph[mm % 10] + 6*i,
glyph[ss / 10] + 6*i, glyph[ss % 10] + 6*i);
}

refresh();
}

int main()
{
WINDOW *win = initscr();

if (win == NULL) exit(1);
noecho(); /* Don't echo unser input */
nodelay(win, TRUE); /* Don't wait for keypresses */

for (;;) {
int key;

key = getch();
if (key != ERR) break;

showtime(win);
sleep(1);
}

delwin(win);
endwin();

return 0;
}

关于c - "Animated"文本输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27996729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com