我正在用c编写一个闹钟,我试图在不打印新行的情况下更新一行文本。
#include <stdio.h>
#include <time.h>
int main(int argc, char *argv[])
{
time_t timer;
char buffer[26];
struct tm* tm_info;
void delay(unsigned int mseconds)
{
clock_t goal = mseconds + clock();
while (goal > clock());
}
while(1){
time(&timer);
tm_info = localtime(&timer);
strftime(buffer, 26, "%Y-%m-%d %H:%M:%S", tm_info);
/* puts(buffer);*/
puts(buffer);
delay(1000);
}
}
这将打印时间和日期并继续打印新行是否可以更新同一行的所有内容?
答案 0 :(得分:1)
虽然终端内有多种更新方式,但ANSI Escape Codes对此类内容非常有用。可以在页面底部附近找到示例。
此外,还存在ncurses library,它提供了更多种类的文本和终端操作。
答案 1 :(得分:0)
要获取新行,请使用printf()
代替puts()
。
要清除打印的内容,您可以在delay()
功能之后,在循环结束前执行此操作:
int length = (int)strlen(buffer);
for (int i = 0; i < length; i++)
{
buffer[i] ='\b';
}
printf(buffer);
结果并不漂亮,但它确实有效。我从this question得到了这个想法。