第五十四章 尾聲(二)
今天的老爹似乎有些著急,在講完枚舉類型后又風(fēng)風(fēng)火火地把結(jié)構(gòu)體和文件指針講了一遍,也沒(méi)有問(wèn)我們有沒(méi)有聽(tīng)懂,就草草地結(jié)束了C語(yǔ)言的所有課程。
「孩子們,C語(yǔ)言的基礎(chǔ)課咱們就上到這兒,但是你們一定要記住,這并不意味著這條路已經(jīng)走到了重點(diǎn)。
相反,其實(shí)你們才剛剛起步。有道是師父領(lǐng)進(jìn)門,修行在個(gè)人。作為你們的領(lǐng)路人,我也只能帶你們走到這里了,接下來(lái)的漫漫編程路,就需要你們自己上下而求索。
其實(shí)除了這些,C語(yǔ)言還有多線程、網(wǎng)絡(luò)套接字、數(shù)據(jù)庫(kù)等各種高深的知識(shí),如果你們想要了解這些技術(shù),就得靠你們自己通過(guò)網(wǎng)上的資料學(xué)習(xí)了。你們現(xiàn)在具備的知識(shí),已經(jīng)足夠支撐你們?nèi)W(xué)習(xí)這些東西了。
學(xué)習(xí)完這些知識(shí),你們已經(jīng)就正式升級(jí)成為了一名編程菜鳥(niǎo),雖然還是菜鳥(niǎo),但是脫離了「小」的范疇,這意味著你們已經(jīng)具備了在程序世界里飛翔的能力。
所以你們可以嘗試著探索這個(gè)世界,慢慢地解開(kāi)它的神秘面紗。興許在途中會(huì)遇到狂風(fēng)暴雨,電閃雷鳴,也會(huì)穿越荊棘,經(jīng)歷沼澤,但是希望你們能夠越挫越勇,那些殺不死我們的,只會(huì)讓我們更強(qiáng)大!」
聽(tīng)老爹這話,是準(zhǔn)備對(duì)我們進(jìn)行放羊,任由我們自生自滅的節(jié)奏啊!在我還沒(méi)有反應(yīng)過(guò)來(lái),老爹便和老媽出門去了,只留下我和小弦子面面相覷。
「爺爺奶奶,老爹老媽這是怎么了?」
我一臉懵逼地望著爺爺奶奶詢問(wèn)道。
「你媽媽身體有些不舒服,你老爹陪她去醫(yī)院看看?!?p> 「難怪老爹一反常態(tài),原來(lái)是老媽身體不適哦!切,果然是為了老婆,連基本的職業(yè)操守都沒(méi)有了?!?p> 不過(guò)鄙視歸鄙視,我還是有些擔(dān)心老媽的情況的。
「那是他們大人的事情,你一個(gè)小孩兒擔(dān)心也沒(méi)有什么用,你要做的就是管好自己,別成為他們的累贅?!?p> 眉頭緊皺的我聽(tīng)了小弦子的話后真的想兩腳踹死他,雖然他說(shuō)得很有道理,但是也太難聽(tīng)了,什么叫累贅?
于是乎我和小弦子把老爹先前快速講的內(nèi)容給重新回顧了一邊,按照書(shū)上寫(xiě)了幾個(gè)例程調(diào)試。
其實(shí)結(jié)構(gòu)體也不難,它就是由若干個(gè)數(shù)據(jù)類型組合而成。比如說(shuō)我們需要在C語(yǔ)言中用一種數(shù)據(jù)類型來(lái)描述一個(gè)人,那么用結(jié)構(gòu)體就非常合適。
描述一個(gè)人的基本信息無(wú)非是姓名、年齡、性別和地址,如果用一個(gè)結(jié)構(gòu)體來(lái)定義人這種事物的話,就是:
struct Person
{
String name;
int age;
String sex;
String address;
};
如果我們要聲明一個(gè)Person變量,也需要使用struct關(guān)鍵字:
struct Person p;
對(duì)于結(jié)構(gòu)體變量的初始化有兩種方式,一種在聲明時(shí)就初始化:
struct Person p ={“張三“, 18,“男“,“CD市“};
這種方式有點(diǎn)像是數(shù)組,在大括號(hào)中給每一個(gè)字段賦值,字段之間用逗號(hào)隔開(kāi)。當(dāng)然了,如果是字符串,需要用雙引號(hào),字符單引號(hào)。
除此之外,還有一種初始化方法:
struct Person p;
p.name =“張三“;
p.age = 18;
p.sex =“男“;
p.address =“CD市“;
從第二種初始化方式來(lái)看,如果要使用一個(gè)結(jié)構(gòu)體的字段,通過(guò)結(jié)構(gòu)體變量.字段名就可以了。
結(jié)構(gòu)體類型和其他類型一樣,也可以用數(shù)組、指針等,有所不同的時(shí)候,當(dāng)用一個(gè)結(jié)構(gòu)體指針指向某個(gè)結(jié)構(gòu)體變量時(shí),如果要通過(guò)指針來(lái)使用結(jié)構(gòu)體的字段,這時(shí)就不能再用「.」了,而是用「->」。比如說(shuō):
struct Person* sp =&p;
sp->name =“張三“;
sp->age = 18;
sp->sex =“男“;
sp->address =“CD市“;
當(dāng)然了,每次聲明變量時(shí)都都上struct關(guān)鍵字挺麻煩的,這個(gè)時(shí)候又輪到typedef關(guān)鍵字上場(chǎng)了,只要在定義一個(gè)結(jié)構(gòu)體使用它,后面在定義結(jié)構(gòu)體變量時(shí)都不用再跟上struct關(guān)鍵字了。
typedef struct
{
String name;
int age;
String sex;
String address;
} Person;
Person p;
p.name =“張三“;
p.age = 18;
p.sex =“男“;
p.address =“CD市“;
至于文件指針嘛,其實(shí)它就是一個(gè)名為FILE的結(jié)構(gòu)體,通過(guò)調(diào)用一些列庫(kù)函數(shù)可以實(shí)現(xiàn)對(duì)磁盤上的文件進(jìn)行讀寫(xiě)。
老爹說(shuō)這個(gè)倒是不用死記硬背,因?yàn)橛行〇|西的確挺繁瑣的,只要查閱資料能夠正確的使用就行了。
按照書(shū)上的例程,我和小弦子都嘗試一下。因?yàn)椴皇煜?,我們倆都犯了不少的錯(cuò)。好在通過(guò)相互檢查以及共同閱讀編譯時(shí)的錯(cuò)誤信息,我們總算是成功地實(shí)現(xiàn)了文件的讀寫(xiě)功能。
既然如此,立刻打開(kāi)推箱子的游戲,直接進(jìn)行實(shí)戰(zhàn),畢竟這個(gè)游戲從文件中加載地圖數(shù)據(jù)以及保存每一步操作的狀態(tài)信息還沒(méi)有完成。一直以來(lái),這都是我和小弦子的心病,時(shí)刻惦記著呢。
只要完成這兩個(gè)功能,推箱子這個(gè)游戲就漸漸趨近于完美了。
正是基于此種原因,我和小弦子是干勁十足。學(xué)著老爹為我們分析公共能需求的過(guò)程,我和小弦子就這兩個(gè)功能的實(shí)現(xiàn)以及函數(shù)的確定展開(kāi)了激烈地爭(zhēng)斗。
期間爺爺奶奶來(lái)我房間們勸導(dǎo)了好多次,讓我們和氣生財(cái),有話好好說(shuō)。
雖說(shuō)這個(gè)形式上是有些不太好,但是效果倒是挺好了,很快我們就確定了數(shù)據(jù)保存和讀取的格式。并且對(duì)細(xì)節(jié)進(jìn)行了商定,最終形成了一個(gè)文檔。
當(dāng)然了,比起老爹之前給我們制定的設(shè)計(jì)概要文檔來(lái)說(shuō),我們這個(gè)就顯得有些粗淺了。但是這好歹是我們?cè)诓唤柚魏瓮饬Φ刈饔孟峦瓿傻模梢哉f(shuō)是具有劃時(shí)代的意義,因?yàn)槲覀儗?shí)現(xiàn)了從0到1的過(guò)程。
接下來(lái)就是按圖施工了,因?yàn)槲覀兛紤]欠妥,在代碼實(shí)現(xiàn)的過(guò)程中可以說(shuō)是狀況百出,于是我們寫(xiě)的那份文檔的內(nèi)容在不停的修改,到了最后已經(jīng)被改得面目全非了,我和小弦子兩個(gè)締造者居然都不認(rèn)識(shí)。
好在我和小弦子都不是輕易放棄之輩,功能總算是在老爹回來(lái)之前給完成了!
多次測(cè)試沒(méi)有問(wèn)題后,我和小弦子嘗試在文件中添加更多的地圖數(shù)據(jù),又經(jīng)過(guò)多次測(cè)試,都沒(méi)有出問(wèn)題!
我和小弦子頓時(shí)信心大增,一鼓作氣在網(wǎng)上找了足足30幅地圖!