这个代码需要用到数组以及while循环,通过左右下标的逐渐向中间逼近来达到想要的效果
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "hello world!!!";
char arr2[] = "##############";
int left = 0;
int right = strlen(arr1) - 1;//-1是因为右下标(最右方)是数组大小-1,也就是13
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
//++和--用来逼近中间下标
left++;
right--;//注意减号不要写成加号
}
}
此时代码的运行结果如下图
此时我们发现这种变换方式并不是我们想要的结果,我们想要的是字符在控制台内逐渐向中间汇聚,而不是直接全部打印出来,所以需要用到Sleep(1000);(要用到windows.h头文件,括号内填写时间,单位是毫秒,也就是每打印完一个休息一秒)以及system(“cls”);(system是执行系统命令的一个函数,cls是清空屏幕,需要用到stdlib.h头文件)
优化后的代码如下:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<Windows.h>
int main()
{
char arr1[] = "hello world!!!";
char arr2[] = "##############";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(1000);
system("cls");//注意system要放到Sleep下面用来清屏以达到想要的效果
left++;
right--;
}
printf("%s\n", arr2);//为了让程序运行的最后能够显示hello world,可以在末尾打印arr2
return 0;
}
运行结果如下图