今天的老爹似乎有些着急,在讲完枚举类型后又风风火火地把结构体和文件指针讲了一遍,也没有问我们有没有听懂,就草草地结束了C语言的所有课程。
「孩子们,C语言的基础课咱们就上到这儿,但是你们一定要记住,这并不意味着这条路已经走到了重点。
相反,其实你们才刚刚起步。有道是师父领进门,修行在个人。作为你们的领路人,我也只能带你们走到这里了,接下来的漫漫编程路,就需要你们自己上下而求索。
其实除了这些,C语言还有多线程、网络套接字、数据库等各种高深的知识,如果你们想要了解这些技术,就得靠你们自己通过网上的资料学习了。你们现在具备的知识,已经足够支撑你们去学习这些东西了。
学习完这些知识,你们已经就正式升级成为了一名编程菜鸟,虽然还是菜鸟,但是脱离了「小」的范畴,这意味着你们已经具备了在程序世界里飞翔的能力。
所以你们可以尝试着探索这个世界,慢慢地解开它的神秘面纱。兴许在途中会遇到****,电闪雷鸣,也会穿越荆棘,经历沼泽,但是希望你们能够越挫越勇,那些杀不死我们的,只会让我们更强大!」
听老爹这话,是准备对我们进行放羊,任由我们自生自灭的节奏啊!在我还没有反应过来,老爹便和老妈出门去了,只留下我和小弦子面面相觑。
「爷爷奶奶,老爹老妈这是怎么了?」
我一脸懵逼地望着爷爷奶奶询问道。
「你妈妈身体有些不舒服,你老爹陪她去医院看看。」
「难怪老爹一反常态,原来是老妈身体不适哦!切,果然是为了老婆,连基本的职业操守都没有了。」
不过鄙视归鄙视,我还是有些担心老妈的情况的。
「那是他们大人的事情,你一个小孩儿担心也没有什么用,你要做的就是管好自己,别成为他们的累赘。」
眉头紧皱的我听了小弦子的话后真的想两脚踹死他,虽然他说得很有道理,但是也太难听了,什么叫累赘?
于是乎我和小弦子把老爹先前快速讲的内容给重新回顾了一边,按照书上写了几个例程调试。
其实结构体也不难,它就是由若干个数据类型组合而成。比如说我们需要在C语言中用一种数据类型来描述一个人,那么用结构体就非常合适。
描述一个人的基本信息无非是姓名、年龄、性别和地址,如果用一个结构体来定义人这种事物的话,就是:
struct Person
{
String name;
int age;
String sex;
String address;
};
如果我们要声明一个Person变量,也需要使用struct关键字:
struct Person p;
对于结构体变量的初始化有两种方式,一种在声明时就初始化:
struct Person p ={“张三“, 18,“男“,“成都市“};
这种方式有点像是数组,在大括号中给每一个字段赋值,字段之间用逗号隔开。当然了,如果是字符串,需要用双引号,字符单引号。
除此之外,还有一种初始化方法:
struct Person p;
p.name =“张三“;
p.age = 18;
p.sex =“男“;
p.address =“成都市“;
从第二种初始化方式来看,如果要使用一个结构体的字段,通过结构体变量.字段名就可以了。
结构体类型和其他类型一样,也可以用数组、指针等,有所不同的时候,当用一个结构体指针指向某个结构体变量时,如果要通过指针来使用结构体的字段,这时就不能再用「.」了,而是用「->」。比如说:
struct Person* sp =&p;
sp->name =“张三“;
sp->age = 18;
sp->sex =“男“;
sp->address =“成都市“;
当然了,每次声明变量时都都上struct关键字挺麻烦的,这个时候又轮到typedef关键字上场了,只要在定义一个结构体使用它,后面在定义结构体变量时都不用再跟上struct关键字了。
typedef struct
{
String name;
int age;
String sex;
String address;
} Person;
Person p;
p.name =“张三“;
p.age = 18;
p.sex =“男“;
p.address =“成都市“;
至于文件指针嘛,其实它就是一个名为FILE的结构体,通过调用一些列库函数可以实现对磁盘上的文件进行读写。
老爹说这个倒是不用死记硬背,因为有些东西的确挺繁琐的,只要查阅资料能够正确的使用就行了。
按照书上的例程,我和小弦子都尝试一下。因为不熟悉,我们俩都犯了不少的错。好在通过相互检查以及共同阅读编译时的错误信息,我们总算是成功地实现了文件的读写功能。
既然如此,立刻打开推箱子的游戏,直接进行实战,毕竟这个游戏从文件中加载地图数据以及保存每一步操作的状态信息还没有完成。一直以来,这都是我和小弦子的心病,时刻惦记着呢。
只要完成这两个功能,推箱子这个游戏就渐渐趋近于完美了。
正是基于此种原因,我和小弦子是干劲十足。学着老爹为我们分析公共能需求的过程,我和小弦子就这两个功能的实现以及函数的确定展开了激烈地争斗。
期间爷爷奶奶来我房间们劝导了好多次,让我们和气生财,有话好好说。
虽说这个形式上是有些不太好,但是效果倒是挺好了,很快我们就确定了数据保存和读取的格式。并且对细节进行了商定,最终形成了一个文档。
当然了,比起老爹之前给我们制定的设计概要文档来说,我们这个就显得有些粗浅了。但是这好歹是我们在不借助任何外力地作用下完成的,可以说是具有划时代的意义,因为我们实现了从0到1的过程。
接下来就是按图施工了,因为我们考虑欠妥,在代码实现的过程中可以说是状况百出,于是我们写的那份文档的内容在不停的修改,到了最后已经被改得面目全非了,我和小弦子两个缔造者居然都不认识。
好在我和小弦子都不是轻易放弃之辈,功能总算是在老爹回来之前给完成了!
多次测试没有问题后,我和小弦子尝试在文件中添加更多的地图数据,又经过多次测试,都没有出问题!
我和小弦子顿时信心大增,一鼓作气在网上找了足足30幅地图!