【发布时间】:2015-07-15 14:29:16
【问题描述】:
在编写更大的程序时,我偶然发现了彩色文本输出的一个小问题。这是一个更简单的程序,可以重现此问题。
#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,虽然其他终端做同样的事情。
我能做些什么来防止这种情况发生?
【问题讨论】:
-
终端开始滚动时会不会出现问题?
-
好点。看起来确实如此。