- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
跟我学Linux编程–4–彩色字符与光标定位
在之前的章节中,细心的同志应该已经发现,在终端中执行命令,有时显示的内容是彩色的,如下图:
终端彩色字符显示
在执行ls命令后,对于可执行程序,其文件名在终端上显示是绿色的,如io1,io2。某些情况下,我们还能发一些字带有底色,有的带下划线,这是怎么回事呢?
原来在ANSI标准中,终端是可以显示不同效果的文本内容的。那么我们的程序中能不能也显示这样花花绿绿的文字呢?答案是肯定的。我们现在来看一个彩色版的Hello, world!程序:
彩色版Hello, world
编译并执行程序,我们得到如下结果:
彩色版Hello, world程序运行结果
我们可以看到,Hello, world!文字是绿色,同时有白色的底色。分析代码不难发现,在printf语句中,字符串”Hello, world!”的前后各多了一断奇怪的字符。
先分析:\033[0;32;47m
其中,\033[是一个字符样式设置符开始标识,是告诉终端,我接下来要设置字符颜色了;
紧接着是三个整数,中间使用”;”号隔开,第一个整数表式样式编号,这里是1,第二个整数表前景也就是文字颜色编号,这里32,第三个整数表示背景颜色编号,这里是47。三种编号取值及意义如下表:
类型 编号 意义 前景 30-37 对应黑、红、绿、黄、蓝、紫、青、白 背景 40-47 对应黑、红、绿、黄、蓝、紫、青、白 样式 0 终端默认 1 高亮显示 4 下划线 5 闪烁 7 反显 8 隐藏
最后,是字母m,表示我们对字符颜色的设定参数完了,告诉终端printf后面显示文字按此执行吧。
再分析:\033[0m,意义非常简单,是告诉终端,之前应用的文字颜色设置,不要再生效了,按照终端默认的方式显示后边的内容吧。有兴趣的同志可以尝试去掉这串字符,编译运行程序,你会发现,程序结束后,在终端里输入命令,也会是和Hello, world一样的彩色效果:
实际上,文字的样式、前景、背景也可以单独设置。设置方式为:\003[编号m。例子中介绍的是一种组合模式。就也是\003[与m之间可以只有一种设定,也可以有多种设定,不同设定之间使用;号隔开。
小结:
1 彩色字符样式设置格式为:\033[样式;前景;背景m
2 想恢复终端原来的字符显示,输出字符串:\033[0m
3 单独的样式设定格式为:\033[编号m
如何控制彩色文字显示,已经介绍完毕。接下来介绍终端中如何指定文本的显示位置。通常,我们调用printf,要行换行,要么一个一个字符往后排,这样的顺次显示字符内容。我们能不能够随意控制字符的显示位置呢?答案依然是肯定的。我们看个例子:
光标定位源码
编译运行程序,我们得到如下结果:
程序运行结果
可以看到,1显示的坐标为(1, 1),2显示的坐标为(2, 2),3显示的坐标为(3, 3)。是什么东西起到了这个作用呢。在Linux终端中,可以使用:
?\033[x;yH的方式来定位下一个字符显示的位置。
我们来分析一下代码:
printf(\033[%d;%dH%d, i, i, i);
正是将数字i显示在坐标为(i, i)的位置。
另外,我们在程序开始,调用了printf(\033[2J),其作用的清屏。
程序的最后,输出一个回车换行,使得程序退出后命令提示符能够靠左显示。
总结:
无论是彩色字符也好,光标定位也好,在终端中都是使用printf特殊字串来实现的。终端中还有其他类似的功能,这里一一列出,供大家参考学习:
颜色代码:
\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 显示光标
经过这一章节的学习,我们已经能够在终端上显示彩色字符,也能控制字符有显示位置,这实现了我们原贪吃蛇游戏的显示基础,下一章节,我们将要介绍如何响应键盘输入,来达成了游戏中对贪吃蛇的控制功能,
文档评论(0)