在编写一个较大的程序时,我遇到了一个彩色文本输出的小问题。这里有一个更简单的程序,可以重现这个问题。
#include <stdio.h>
#define COL_RESET "\033[0m"
#define COL_BG_RED "\x1B[41m"
char *str = "the quick brown fox jumped over the lazy dog";
int main(int argc, char *argv[])
{
int i = 10;
while (i) {
puts(COL_BG_RED);
puts(str);
puts(COL_RESET);
puts(str);
i--;
}
return 0;
}
现在运行程序时我得到了以下结果:
第一次 - 预期的结果
第二次
可以看出,即使将颜色重置为红色,该程序仍然会随机打印行。当在新终端中启动时,它总是打印预期的结果。除非运行clear
,否则无法保证输出不会像第二张图片那样混乱。
在图片中,我使用的是xterm
,尽管其他终端也会出现同样的问题。
我该怎么做才能防止这种情况发生?