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