printf ("\033[33m\033[5m\n");
printf ("splash 1. !\n");
printf ("splash 2. !\n");
printf ("\033[0m\n");
http://blog.csdn.net/acs713/article/details/22682503
通过printf在控制台终端输出带颜色的打印或日志信息
考虑以下应用场景或需求:用户希望看到的显示在终端的打印信息能够按颜色输出。比如,错误信息用红色输出,正确信息用绿色输出,普通信息则是常规输出。
如何做到呢?printf函数可以帮助做到这一点。
使用格式为: printf("\033[字背景颜色;字体颜色m字符串\033[0m" );
例如:printf("\033[47;31mhello world\033[5m");
47是字背景颜色, 31是字体的颜色, hello world是字符串. 后面的\033[5m是控制码.
颜色代码:
字背景颜色范围: 40--49 字颜色: 30--39
40: 黑 30: 黑
41: 红 31: 红
42: 绿 32: 绿
43: 黄 33: 黄
44: 蓝 34: 蓝
45: 紫 35: 紫
46: 深绿 36: 深绿
47: 白色 37: 白色
ANSI控制码:
\033[0m 关闭所有属性
\033[1m 设置高亮度
\03[4m 下划线
\033[5m 闪烁
\033[7m 反显
\033[8m 消隐
\033[30m -- \033[37m 设置前景色
\033[40m -- \033[47m 设置背景色
\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 显示光标
这样, 在某些时候就可以实现动态的输出.
附:
实现hello world的带颜色的输出,并且每过一秒产生一个闪烁的功能.
(注:具体还得判断终端类型)
- #include
- #include
- #include
- #include
- int flag = 0;
- void sig_int(int signum)
- {
- if (flag == 1)
- fprintf(stderr, "\033[47;31mhello world\033[5m");
- fprintf(stderr,"\033[;\033[0m");
- fprintf(stderr,"\033[;\033[0m");
- printf("\n");
- exit(0);
- }
- int main()
- {
- int i = 0;
- struct sigaction sig_act;
- sig_act.sa_handler = sig_int;
- sigemptyset(&sig_act.sa_mask);
- sig_act.sa_flags = 0;
- if (sigaction(SIGINT, &sig_act, NULL)
- {
- fprintf(stderr, "signal error\n");
- exit(1);
- }
- while (i++
- {
- fprintf(stderr, "\033[;\033[s");
- fprintf(stderr, "\033[47;31mhello world\033[5m");
- flag = 0;
- sleep(1);
- fprintf(stderr, "\033[;\033[u");
- fprintf(stderr, "\033[;\033[K");
- flag = 1;
- sleep(1);
- }
- fprintf(stderr, "\033[47;31mhello world\033[5m");
- fprintf(stderr,"\033[;\033[0m");
- printf("\n");
- return 0;
- }
该程序实现输出十次hello world然后退出. 使用一个信号是为了还原默认的终端输出的颜色.