while循环的简单应用
题目:演示多个字符从两端向中间移动
有两串字符,分别是“Hello World!”和“############”,在开始的时候都是#,逐渐将#变为Hello World!中的字符,大致是这样:
第一次:
############
H##########!
第二次:
He########d!
第三次:
Hel#######ld!
……
直到:
Hello World!
代码实现
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "Hello World!";
char arr2[] = "############";
int left = 0;
int right = strlen(arr1) - 1; //需要包含头文件<string.h>
printf("%s\n", arr2);
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
left++;
right--;
}
return 0;
}
分析
有两个字符串,分别是“Hello World!”和“############”两个数组,左下标为0,右下标为字符的长度减去1,这里不使用sizeof来求右下标是因为这是字符串,前面的文章说过,字符串结束的标志是\0,它是隐含在字符串末尾的,当使用sizeof计算的时候会将\0一同计算进去。定义两个字符数组,分别为arr1和arr2,想要实现两边字符往中间移动,相当于从两边开始arr1一个一个覆盖掉arr2。
结果
我想让它停顿一下再打印,而不是一股脑全部打印出来,需要用到Sleep,可以实现停顿的效果
代码二次实现
#include<stdio.h>
#include<string.h>
#include<windows.h>
int main()
{
char arr1[] = "Hello World!";
char arr2[] = "############";
int left = 0;
int right = strlen(arr1) - 1; //需要包含头文件<string.h>
printf("%s\n", arr2);
while (left <= right)
{
Sleep(1000); //打印一次后休眠1000毫秒,需要包含头文件<windows.h>
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
left++;
right--;
}
return 0;
}
二次结果
视频1
还不是很满意,我想让它在一行变换
代码最终实现
#include<stdio.h>
#include<string.h>
#include<windows.h>
int main()
{
char arr1[] = "Hello World!";
char arr2[] = "############";
int left = 0;
int right = strlen(arr1) - 1; //需要包含头文件<string.h>
printf("%s\n", arr2);
while (left <= right)
{
Sleep(1000); //打印一次后休眠1000毫秒,需要包含头文件<windows.h>
system("cls"); //清理屏幕,system可以执行系统命令
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
left++;
right--;
}
return 0;
}
最终结果
视频2