【发布时间】:2016-01-28 10:00:00
【问题描述】:
我创建了一个显示文本的宏,然后刷新标准输出。问题是如果文本比新文本更长,如何强制清除旧的打印文本。
示例:如果我尝试打印一个包含 50 个字符的字符串,然后我需要覆盖所有文本并用 25 个字符重写文本。我总是打印第一个文本的一部分,因为第二个更短。
另外我需要在每行末尾插入\r,如何在我的宏中添加?
#include <stdio.h>
#include <string.h>
// I need to add "\r" to macro instead of to add it for all string
#define MESSAGE( fmt, args...) \
do { setbuf(stdout, NULL); fprintf(stdout, fmt, ## args); fflush(stdout); sleep(5); } while (0)
int main()
{
MESSAGE( "the application is started successfully\r");
MESSAGE( "the application will be stopped soon\r");
MESSAGE( "app stopped: ok\n\r");
return 0;
}
结果:
./test2
app stopped: ok will be stopped soonlly
预期结果:
./test2
app stopped: ok
【问题讨论】:
-
1) 使用标准 C
__VA_ARGS__,而不是旧的 gcc 扩展。 2) 使用函数! -
要添加
\r,只需添加另一个fprintf(stdout,"\r");或fputc('\r',stdout); -
VT100 转义序列
\x1b[2K(擦除光标所在的行)可能有用,具体取决于您的 shell 或终端。 -
@MikeCAT:谢谢,我已经解决了
\x1b[2K的问题