C语言表白程序系列

注意,这里的表白程序是本人根据所学自创的,所以比较简单

展示

这是一共动态效果,不好展示就描述一下。
在字符数组的话(我已经设置好了,是英文),通过一个等长的由’#'组成的线逐渐将英文两边的话输出,然后通过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;
}

效果没有完善好,只是随便玩玩。
下面就来讲解自己写这个程序的思路和方法

这里先讲一个简单的题目,相信懂了之后,你就可以自己取编写程序了(我就是从这个题目获得的灵感)

题目要求

编写代码,演示多个字符从两端移动,向中间汇集。

思路

  1. 当然是创建两个字符数组,一个放’Wlcome to CSDN!’,另一个放相应数量的’#’(这里是’###############’)
	char arr1[20] = "Wlcome to CSDN!"
	char arr2[20] = "###############"

当然你也可以写个循环来输出’#’,效果是一样的。示意图就是这样(两个字符数组是一样长的,画图软件的问题就看起来不是一样长)
在这里插入图片描述

  1. 创立一个left和righ变量
    创立这两个变量就是为了能让’###############'从两边输出。

  2. 对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的详细一点的介绍,可以看个大概在这里插入图片描述

  1. 进行第一次的打印
    目标是这样:在这里插入图片描述
    所以就可以这么写
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s", arr2);
  1. 加上动态效果
arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s", arr2);
		Sleep(300);
		system("cls");

这里的Sleep函数和system都是需要一个头文件’#include <windows.h>’
Sleep函数:表示再屏幕上停留多少秒,后面的括号单位是毫秒
system:表示的是cmd窗口,而’cls’表示的意思是清屏

大家可以百度搜搜有关内容,因为时间久了他们的头文件我也忘记了。

  1. 加上循环
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次不会出现重复字母的话就可以自己画图试试,很好理解的,如果还是不知道就私信我。

  1. 完整程序
#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;
}

如果完全理解了这道题目,相信你就可以自己编写程序了,加油!为了脱单!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值