Linux系统下,在终端打印出闪烁的星星图案。
一、首先需要耐心,使用输出语句先”弄“出一个星星图案
(我是为了打印出来的星星是在终端中间,所以这样子敲的,可根据自己想法完成)
二、调用system函数,实现闪烁功能
分析:闪烁功能是啥?是不是像路边的彩灯一样亮、灭、亮、灭交替的样子?一开始我也想不出来”闪烁“到底该如何完成,搜索了几十分钟才发现有文章提到了”清屏“功能,茅塞顿开。使用循环语句,打印图案,清屏,再打印图案,再清屏,在视觉上就实现了”闪烁“。
清屏功能需要调用system函数。(system函数功能详解,请自行去查找,这里只讲闪烁的星星0_0).
使用时如下,放在代码合适的地方即可
system("clear");
效果挺好,就是闪的太快了,多试了几次我发现还有几个问题:
1、第一次打印,星星并没有在终端中间;
2、闪的太快,我用的while(1)循环不知道怎么停止,只能强行关闭终端;
解决方法:
1、第一次没在中间,是因为终端之前有我们自己输入的命令,如果在成簇刚开始运行的时候就进行清屏,那么再打印的图案就会出现在屏幕中间,即在程序开头也加上一句清屏的语句;
2、停止while(1)循环结束程序,可用ctrl+c (没错,在平时就是复制的操作)来强行结束一个在运行的程序;
3、闪的太快?那不挺好的嘛,就是容易看花眼……可在程序中加入延时函数,延时函数顾名思义就是让代码延时一段时间后执行,根据个人所需效果加入到代码段中;
三、使用延时函数让程序效果更优秀
延时函数sleep:
sleep函数功能是包含在<unistd.h>这个头文件当中,所以用sleep函数需要写上头文件。
#include <unistd.h> //延时函数头文件
Linux下 sleep的参数为秒,所以延迟1秒为 sleep(1)。(自己随意设置时间好了)
sleep (1); //延时函数
完整代码如下:
#include <stdio.h>
#include <unistd.h>
int main()
{
int i, n;
while(1)
{
system("clear"); //开始前清理屏幕
printf(" \n");
printf(" \n");
printf(" \n");
printf(" \n");
printf(" \n");
printf(" \n");
printf(" - \n");
printf(" --- \n");
printf(" ------------- \n");
printf(" --------- \n");
printf(" ------- \n");
printf(" --- --- \n");
printf(" - - \n");
sleep (1); //延时清屏
system("clear"); //清理屏幕
sleep (1); //延时清屏
}
}
ps:一开始不清楚怎么结束while(1)循环,我就使用的for循环,自己设置循环次数,也算是达到了要求,所以有时候解决问题可以另辟蹊径,多思考。
(这里不重要)
写在结尾的话:作为Linux新手或者说敲代码新手,不知道怎么打印闪烁的图案,敲了半天也只能弄出一个感觉好点的星星图案,而闪烁的功能更是不知道该怎么实现。搜索了很久,只发现了零星的文章说起这个”闪烁“功能。完成这个功能还是花了一些时间,完成的时候还是很开心。第一次写文章,就从这个开始吧。希望我能坚持下去,能够继续走下去。