注意,这里的表白程序是本人根据所学自创的,所以比较简单
展示
这是一共动态效果,不好展示就描述一下。
在字符数组的话(我已经设置好了,是英文),通过一个等长的由’#'组成的线逐渐将英文两边的话输出,然后通过Sleep函数和system来实现动态效果…
(还是自己跑一下把,个人语文水平不高)
#include <stdio.h>
#include <string.h>
#include <windows.h>
int main() {
//变量的定义
int left = 0, right = 0;
//创建n个字符数组
char arr1[20] = "I may be crazy.";
char arr2[20] = "###############";
char arr3[40] = "I fell in love with you like crazy.";
char arr4[40] = "###################################";
char arr5[20] = "I love you.";
char arr6[20] = "###########";
//计算字符数组的大小
int sz = strlen(arr1);
int sz1 = strlen(arr3);
int sz2 = strlen(arr5);
right = sz - 1;
//printf("%d", sz);
//替换
for (left = 0; left <= sz / 2; left++, right--) {
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s", arr2);
Sleep(300);
system("cls");
}
printf("%s\n", arr2);
for (left = 0,right = sz1 - 1; left <= sz1 / 2; left++, right--) {
arr4[left] = arr3[left];
arr4[right] = arr3[right];
printf("%s", arr4);
Sleep(200);
system("cls");
}
printf("%s\n", arr4);
printf("I just wanna to say.");
putchar('\n');
Sleep(3000);
for (left = 0; left <= sz2; left++) {
arr6[left] = arr5[left];
printf("%s", arr6);
Sleep(800);
system("cls");
}
return 0;
}
效果没有完善好,只是随便玩玩。
下面就来讲解自己写这个程序的思路和方法
这里先讲一个简单的题目,相信懂了之后,你就可以自己取编写程序了(我就是从这个题目获得的灵感)
题目要求
编写代码,演示多个字符从两端移动,向中间汇集。
思路
- 当然是创建两个字符数组,一个放’Wlcome to CSDN!’,另一个放相应数量的’#’(这里是’###############’)
char arr1[20] = "Wlcome to CSDN!"
char arr2[20] = "###############"
当然你也可以写个循环来输出’#’,效果是一样的。示意图就是这样(两个字符数组是一样长的,画图软件的问题就看起来不是一样长)
-
创立一个left和righ变量
创立这两个变量就是为了能让’###############'从两边输出。 -
对left和right赋值
left从左边开始自然就是0(下标),right从右边开始就是sz - 1(表示字符数组元素个数)
int sz = strlen(arr2);
//或者是
int sz = sizeof(arr2)/sizeof(arr2[0])
//但是用第二个的话就right = sz -2;
应为sizeof加上了’\0’的大小,而strlen没有计算’\0’这个元素,所以…
这里附上strlen的详细一点的介绍,可以看个大概
- 进行第一次的打印
目标是这样:
所以就可以这么写
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s", arr2);
- 加上动态效果
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s", arr2);
Sleep(300);
system("cls");
这里的Sleep函数和system都是需要一个头文件’#include <windows.h>’
Sleep函数:表示再屏幕上停留多少秒,后面的括号单位是毫秒
system:表示的是cmd窗口,而’cls’表示的意思是清屏
大家可以百度搜搜有关内容,因为时间久了他们的头文件我也忘记了。
- 加上循环
for (left = 0; left <= sz / 2; left++, right--) {
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s", arr2);
Sleep(300);
system("cls");
}
这里只对for的判断语句’left <= sz / 2’解释:
left的初始值是0,以已知arr2字符数组长度为例,那么一共是需要循环8次,所以是这么写。
如果是去掉’='那么就会循环7次,两个加起来就是14次,还会有一个字符不会打印。
如果不知道为什么是15个元素而打印16次不会出现重复字母的话就可以自己画图试试,很好理解的,如果还是不知道就私信我。
- 完整程序
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
int main() {
int i = 0;
char arr1[] = "Welcome to bit!";
char arr2[] = "###############";
//计算个数
int sz = sizeof(arr2) / sizeof(arr2[0])-1;//这里还把'\0算进去了,所以要-1.
//定义左右下表
int left = 0, right = sz-1;//因为是计算下标,而下标是从0开始的所以最后一个下表是14,所以要-1.
//或者是right = strlen(arr2) - 1;
//打印第一组
for (left = 0; left <= sz / 2; left++, right--) {//或者是left<=right
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(800);//单位是毫秒
system("cls");
}
printf("%s\n", arr2);
return 0;
}
如果完全理解了这道题目,相信你就可以自己编写程序了,加油!为了脱单!