本期介绍🍖
主要介绍:如何实现在屏幕上从两边向中间逐渐打印字符串。
题目:编写字体逐渐展现程序,功能是:多个字符从两端向中逐渐间显现,直到全部显示为止。举个例子,要逐渐显示“hello world ”
字符串,过程如下所示。
"###########"
"h#########d"
"he#######ld"
"hel#####rld"
"hell###orld"
"hello#world"
"hello world"
首先需要创建两个数组arr1和arr2,arr1存储用户想要打印的字符串,arr2则是存储由‘#’
组成的字符串。然后将arr1中的字符逐次覆盖到arr2中,从两侧向中间覆盖,且每覆盖一次就执行一次打印,就可以实现上述效果。
值得注意:读取用户输入的字符串,无法使用scanf
函数实现,因为scanf
无法有效读取带空白字符的字符串,当遇到第一个空白字符时scanf
就停止读取了。这里我推荐使用gets
函数,是专门用于读取字符串的,函数原型如下所示。
char* gets(char* str);
gets
函数会从缓存中第一个字符开始读取,直到遇见换行符或文件结尾才停下,并会将字符串结束标志‘\0’
自动追加复制到str
字符串的末尾。如果gets
函数读取成功,会将读取到的字符串,存储到参数str
所指向的那块空间,并将那块空间的地址作为返回值返回。如果gets
函数读取失败,则返回NULL
。
#include<stdio.h>
#include<string.h>
#define NUM 100
int main()
{
char arr1[NUM] = { 0 };
char arr2[NUM] = { 0 };
//输入你想显示的字符串
printf("输入你想显示的字符串:>\n");
char* ch = gets(arr1);//读取字符串到arr1数组中
//判断是否正常读取
if (ch == NULL)//读取失败
{
printf("读取失败\n");
}
else//正常读取
{
int num = 0;
int i = 0;
int left = 0;
int right = 0;
//计算输入字符串字符个数
num = strlen(arr1);
//初始化arr2数组
for (i = 0; i < num; i++)
{
arr2[i] = '#';
}
arr2[i] = '\0';//不能忘记字符串末尾的‘\0’
left = 0;//数组最左侧元素的下标
right = num - 1;//数组最右侧元素的下标
//从两侧开始逐渐替换arr2数组
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
//打印arr2数组
printf("%s\n", arr2);
//两侧下标网中间靠近一个单位
left++;
right--;
}
}
return 0;
}
为了能够更好的达到,逐渐显示字符串,下面介绍两个库函数:
system("cls")
函数,用于清空输出到屏幕上的信息,需要引用<stdlib.h>
头文件Sleep(unsigned int second)
函数,用于延时,单位为毫秒,需要引用<windows.h>
头文件。
代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<Windows.h>
#define NUM 100
int main()
{
char arr1[NUM] = { 0 };
char arr2[NUM] = { 0 };
//输入你想显示的字符串
printf("输入你想显示的字符串:>\n");
char* ch = gets(arr1);//读取字符串到arr1数组中
//判断是否正常读取
if (ch == NULL)//读取失败
{
printf("读取失败\n");
}
else//正常读取
{
int num = 0;
int i = 0;
int left = 0;
int right = 0;
//计算输入字符串字符个数
num = strlen(arr1);
//初始化arr2数组
for (i = 0; i < num; i++)
{
arr2[i] = '#';
}
arr2[i] = '\0';//不能忘记字符串末尾的‘\0’
left = 0;//数组最左侧元素的下标
right = num - 1;//数组最右侧元素的下标
//从两侧开始逐渐替换arr2数组
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
system("cls");//清空屏幕
printf("%s\n", arr2);//打印arr2数组
Sleep(1000);//延时1秒
//两侧下标网中间靠近一个单位
left++;
right--;
}
}
return 0;
}
效果如下视频所示:
逐渐展现字符串
这份博客👍如果对你有帮助,给博主一个免费的点赞以示鼓励欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!!
如果有什么疑问或不同的见解,欢迎评论区留言欧👀。