您的位置:首页 > 其它

printf 输出颜色

2013-08-13 20:21 225 查看
参考网址:

http://blog.sina.com.cn/s/blog_4c12aff701008284.html

http://www.360doc.com/content/12/0518/20/1016783_211970697.shtml

一.入门:

1. 概述:

有时候为了实现在终端输出的时候字体能够带颜色,并且可以产生简单的闪烁的功能,特写了下列的代码。

2. 代码:

实现hello world的带颜色的输出,并且每过一秒产生一个闪烁的功能.(注:具体还得判断终端类型)

(LINUX) CODE:

#include<stdio.h>

#include<unistd.h>

#include<signal.h>

#include<stdlib.h>

int flag = 0;

void sig_int(int signum)

{

if (flag == 1)

fprintf(stderr,"\033[47;31mhello world\033[5m");

fprintf(stderr,"\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) < 0)

{

fprintf(stderr,"signal error\n");

exit(1);

}

while (i++ < 10)

{

fprintf(stderr,"\033[s"); //保存光标位置

fprintf(stderr,"\033[47;31mhello world\033[5m"); //白底红字打印helloworld,闪烁

flag= 0;

sleep(1);

fprintf(stderr,"\033[u"); //恢复光标位置

fprintf(stderr,"\033[K"); //清楚光标开始到行末

flag= 1;

sleep(1);

}

fprintf(stderr,"\033[47;31mhello world\033[5m");

fprintf(stderr,"\033[0m");

printf("\n");

return 0;

}

二.格式详解:

1. 示例

CODE:

printf("\033[字背景颜色;字体颜色m字符串\033[0m" );

printf("\033[47;31mhello world\033[5m");

47是字背景颜色, 31是字体的颜色, hello world是字符串. 后面的\033[5m是控制码.

echo -e "\033[32;49;1m [DONE] \033[39;49;0m"

输出结果 :[DONE]

2. 颜色控制

字背景颜色范围:40--49 字颜色: 30--39

40:黑 30:黑

41:红 31:红

42:绿 32:绿

43:黄 33:黄

44:蓝 34:蓝

45:紫 35:紫

46:深绿 36:深绿

47:白色 37:白色

颜色如下:

none ="\033[0m"

black ="\033[0;30m"

dark_gray = "\033[1;30m"

blue ="\033[0;34m"

light_blue = "\033[1;34m"

green ="\033[0;32m"

light_green -= "\033[1;32m"

cyan ="\033[0;36m"

light_cyan = "\033[1;36m"

red = "\033[0;31m"

light_red = "\033[1;31m"

purple ="\033[0;35m"

light_purple = "\033[1;35m"

brown ="\033[0;33m"

yellow ="\033[1;33m"

light_gray = "\033[0;37m"

white ="\033[1;37m"

3. 输出特效控制

输出特效格式控制:

\033[0m 关闭所有属性

\033[1m 设置高亮度

\033[4m 下划线

\033[5m 闪烁

\033[7m 反显

\033[8m 消隐

\033[30m -- \033[37m 设置前景色

\033[40m -- \033[47m 设置背景色

光标位置等的格式控制:

\033[nA 光标上移n行

\033[nB 光标下移n行

\033[nC 光标右移n行

\033[nD 光标左移n行

\033[y;xH设置光标位置

\033[2J 清屏

\033[K 清除从光标到行尾的内容

\033[s 保存光标位置

\033[u 恢复光标位置

\033[?25l 隐藏光标

\033[?25h 显示光标

\033[2J  清除屏幕

\033[0q  关闭所有的键盘指示灯

\033[1q  设置“滚动锁定”指示灯 (ScrollLock)

\033[2q  设置“数值锁定”指示灯 (NumLock)

\033[3q  设置“大写锁定”指示灯 (CapsLock)

\033[15:40H 把关闭移动到第15行,40列

\007   发蜂鸣生beep

三. 其它

把知识延伸下:

###########################

文本终端的颜色可以使用“ANSI非常规字符序列”来生成。举例:

  echo -e "\033[44;37;5m ME \033[0m COOL"

以上命令设置背景成为蓝色,前景白色,闪烁光标,输出字符“ME”,然后重新设置屏幕到缺省设置,输出字符 “COOL”。“e”是命令 echo 的一个可选项,它用于激活特殊字符的解析器。“\033”引导非常规字符序列。“m”意味着设置属性然后结束非常规字符序列,这个例子里真正有效的字符是 “44;37;5” 和“0”。

修改“44;37;5”可以生成不同颜色的组合,数值和编码的前后顺序没有关系。可以选择的编码

#######################

RedHat的字体和背景颜色的改变方法:

命令:

PS1="[\e[32;1m\u@\h \W]\\$"



export PS1="[\e[32;1m\u@\h \W]\\$" 两者的区别请查看环境变量的相关资料

解释:

\e[32;1m:这就是控制字体和背景颜色的转义字符,30~37是字体颜色、40~47是背景颜色

例子中的32;1m数字的位置是可以对调的如\e[1;32m,如果是在X环境下可以更换一下1的范围0~10,可能有的没用处:0或者不写(\e [0;32m或\e[;32m)显示浅颜色,1:显示高亮 4:加下划线.....如果改后的效果不好,但是又还原不了,那就不写m前面的数字,如\e[32;m,或者直接注销再登陆

\u \h \W:这是一些转义字符,下面详细解释:

\d :代表日期,格式为weekdaymonth date,例如:"Mon Aug 1"

\H :完整的主机名称。例如:我的机器名称为:fc4.linux,则这个名称就是fc4.linux

\h :仅取主机的第一个名字,如上例,则为fc4,.linux则被省略

\t :显示时间为24小时格式,如:HH:MM:SS

\T :显示时间为12小时格式

\A :显示时间为24小时格式:HH:MM

\u :当前用户的账号名称

\v :BASH的版本信息

\w :完整的工作目录名称。家目录会以 ~代替

\W :利用basename取得工作目录名称,所以只会列出最后一个目录

\# :下达的第几个命令

\$ :提示字符,如果是root时,提示符为:# ,普通用户则为:$

\n :新建一行

字体并不局限于一个颜色,可以有多个颜色:

PS1="[\e[32;1m\u@\e[35;1m\h \e[31;1m\W]\\$"

以上两个命令在注销后再登陆就失效了,用下面方法使其永久生效:

vi /etc/profile

在“export PATH .....”下面添加一行:export PS1="[\e[32;1m\u@\h \W]\\$"

注销再登陆,就成功了,如果没生效,使用source /etc/profile 命令试试,或者直接重启机器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: