printf (控制码:颜色 光标 ...)
控制码
颜色控制码:
\033[显示方式;前景色;背景色m
\033[0m 默认
\033[1;32;40m 绿色
\033[1;31;40m 红色
显示方式: 0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、5(闪烁)、25(非闪烁)、7(反显)、27(非反显)
前景色: 30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋红)、36(青色)、37(白色)
背景色: 40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋红)、46(青色)、47(白色)
示例代码:
printf( "\033[1;31;40m 输出红色字符 \033[0m" );
其他控制码:
\033[0m 关闭所有属性
\033[1m 设置高亮度
\03[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[nA 光标上移n行
\03[nB 光标下移n行
\033[nC 光标右移n行
\033[nD 光标左移n行
\033[y;xH设置光标位置
\033[2J 清屏
\033[K 清除从光标到行尾的内容
\033[s 保存光标位置
\033[u 恢复光标位置
\033[?25l 隐藏光标
\33[?25h 显示光标
打印信息无\n输出
在linux系统下, printf函数是行缓冲式的输出,当 printf遇到\n时,或者缓冲区满时,才会将缓冲区里的内容刷新到标准输出(stdout).
因此, printf("p"); 等语句的显示不能立刻显示在屏幕上,但是printf("p\n"); 可以.
为了解决这个问题可以通过如下
// 方法1
printf("p");
fflush(stdout);
// 方法2
fprintf(stderr, "p");
打印信息分类输出
int printf(const char *format, arg...);
int fprintf(FILE *stream, const char *format, arg...);
printf函数使用的输出设备是标准输出设备,即stdout。
fprintf函数第一个参数使用stdout或stderr进行输出信息分类。
虽然stdout和stderr在正常情况下都指向标准输出设备,但通常程序运行时的命令行参数,可以分别控制stdout和stderr指向不同的设备或文件。
这样,就可以达到对输出信息进行分类控制了。如下面的代码段所示:
test.c
// 一般输出信息
extern char *info;
extern char *errinfo;
fprintf(stdout, "%s", info);
// 特别关注的输出信息
fprintf(stderr, "%s", errinfo);
这样,在运行程序时,可以使用如下的命令行:test 1&>1.txt 2&>2.txt