第七课
前言
由于暑假将尽,并察觉上课同学学习力较强(or已有基础),现决定加快进度,增加每节课的知识点浓度。
复习
字符、字符串
要想要了解字符数组,我们就要先了解 字符 和 字符串 的区别
那么,什么是字符,什么是字符串呢?
字符,就是单个单个的字,也可以是单个的标点符号
同时,单个的数字也可以是一个字符(作为字符的数字一般不用于做计算)
字符最大的特点就是 单个
字符串,就是许多字符组合起来的一串
并且字符串一定带有 结束符号 '\0'
大家可以这样理解
- 字符 单个的山楂
- 字符串 串成糖葫芦的一串山楂(结束符号等于那根串起来的竹签)
在 C语言 中,我们通过单双引号来区分字符和字符串
被单引号''
包围起来的就是字符
'a''b''c''d' //四个字符
被双引号""
包围起来的就是字符串
"abcd" //字符串
//实则等于
'a''b''c''d''\0'
以上,就是 字符 和 字符串 的区别
字符数组
字符数组,顾名思义是用于存放字符的数组
为什么我会把这个数组单独拿出来讲,而不是和前面其他数组一起讲呢
因为这个数组有它的不同之处
其他类型的数组定义了多少个空间,就可以存放多少个数据
比如:
int array1[5];
float array2[5];
这些数组都拥有下标为 0 – 4 的 5 个空间
这两个数组分别定义了 5 个空间,它们就各能存放 5 个各数据
而字符数组不同之处主要在于涉及到了字符串
而我们刚刚说过,对于字符串来说
它需要最后一个空间来存放 结束符号 '\0'
也就是说,如果你定义了一个 5 个空间的字符型数组
用于存放字符串的话
你只有4个可用的空间来存放字符(因为最后要留一个空间给'\0'
)
如果不留这个空间呢?
其实也可以正常运行,不过在使用一些操作字符串的函数时非常容易出错,并且这种bug不容易找
比如puts()
函数等。
字符型数组的定义方法与其他数组相同,例:
char a[5];
而初始化的方法有以下几种
第一种、直接给各个空间放入字符
char a[5] = {'a','1','#',' ','\0'};
// 分别为 小写英文字符 数字字符 符号字符 空格(符号) 结束符
第二种、直接赋值字符串
char a[5] = "a1# ";
char a[] = "a1# "; //这种赋值方法可以不填所需空间大小,会自动计算并以结束符结尾(其他不行
第三种、操作单个字符数组空间
char a[5];
a[0] = 'a';
a[1] = '1';
a[2] = '#';
a[3] = ' ';
a[4] = '\0';
第一种,和其他数组相同,只不过请注意
因为你存放的是 “字符” 所以要记得添加单引号 ''
第三种同样,只需要注意单引号就行
而第二种方法,你在初始化的时候是可以不输入空间大小的
它能够自动计算大小,并且在最后自动添加结束符
这种方法,我们在前面储存人名的时候就用过
二维字符数组
二维数组的定义方法我就不多说了
char map[50][50];
主要要讲一下的是初始化方法
一般我们可以这么初始化
char a[50][50]={"##############################",
"#0 # ## ### ####",
"# ###### # # # # ##########",
"# # ## # # #### # ### ####",
"# # ## ### # # ## ####",
"##### # # ##### ## ####",
"# # ##### # # # # # ##",
"# # # ## # #### ## # # ####",
"# # # ### ## # # ####",
"# # # ####### ## ###### # ##",
"# # ## # ## ###### ### #",
"# ###### # ##### # # #",
"# # # ##### ### # ",
"# ######## ##### # ### ### # #",
"# # ## ##### ### ###",
"##### # ## # ######## # #",
"# # ## ## ### # #",
"# # ### ###### ####### #",
"# # ### ## # #",
"##############################"};
当然,也可以嵌套循环使用scanf
来输入
char map[50][50];
int i, j;
for(i=0;i<50;i++)
for(j=0;j<50;j++)
{
scanf("%c",&map[i][j]);
}
免回车读取一个字符
平时输入我们可以输入完一个字符敲击一次回车
可是当我们要做游戏的时候就不能这样子了
输入一个字符敲一次回车这怎么玩对吧
所以我们就需要一个函数,能够免去回车读取字符
目前我所知道的有两个
getche(); //带回显
getch(); //不带回显
我们先来说说getche();
这个函数的作用是读取一个字符输入(不需回车),并且直接重新输出
接着是getch();
这个函数才是我们需要的,直接读取,并且不带回显
下面这小段代码能显示getch()
的特性
char a;
a = getch();
大家可以看到,并没有回显
不过,我们加上printf("%c",a);
就能看到其实是已经成功读取进去了
好,今天就到这里
下节课,我来给大家解决小人在迷宫里走路的坐标问题~