揚聲器1:讓我們寫一個程序, 提示輸入名稱和用戶 房子的三名學生。 現在,為了存儲這些名字和房子 我們可以使用,什麼的,六個變量。 三個字符串的名稱,和另一 三根弦的房子, 但我們已經知道,我們可以清理 該代碼使用數組代替, 例如大小為3的數組 三個名字,而另一個數組 大小3的房子。 但事實證明,我們可以清理它 進一步的是,居然讓那些 名稱和房屋在一起,使一個 學生的姓名以及他或她的房子 以某種方式封裝,所以 說話,到同一個變量。 要做到這一點,不過,我們需要聲明 我們自己的數據類型,我們自己的類型在C中, 將c的作者並不一定 想起多年前。 要做到這一點,我們可以使用關鍵字 的typedef,隨著 其它關鍵字struct。 讓我們一起來看看。 裡面structs.h的,我已經 得到由開始 包括CS50庫。 我接下來要輸入typedef結構, 然後一個大括號。 裡面的結構的,我要去 指定學生必須有一個 叫名字的字符串,而另一個 字符串被稱為房子。 我打算再關閉我的花括號, 並指定名稱 這個新的數據類型應為學生。 換句話說,通過這個語法有我 宣布我自己的一個新的數據類型 根本不存在剛才和 這種數據類型的內部有兩個數據 字段或數據成員,一個叫名字, 一個叫房子,這兩者 為string類型。 現在,讓我們使用這種類型的 在實際的程序。 在structs0.c,我已經得到了類似 我已經開始與一些 樣板代碼,而且我現在 要使用該數據 學生類型,如下所示。 我首先要聲明一個 學生類型數組,我會 調用數組的學生 - 複數 - 我會指定它的大小將 三種,其中,通知,很值 不斷的學生 - 在所有的首都 - 我已經聲明了這裡, 前面的文件中。 現在讓我們遍歷這三個 學生,並提示用戶 他們的名字和房屋。 對於int我得到0,i小於 較恆定的,我+ +。 而現在這個體內的內 環,我要打印出來的東西 像學生的名字。 我當時要去真正享受 通過指定學生的姓名 學生支架I。 換句話說,我想第i個學生 在被稱為學生的陣列,但現在 我想獲得在該第i個學生 名,而要做到這一點,我將使用 本。運營商,以獲得在一個 該結構的特定領域內。 所以我指定學生支架I。名稱 得到的GetString的返回值()。 同時,我要打印出來 類似的東西,說學生 房子,現在我要指定 即第i個學生家場 將得到的返回值 另一個電話給GetString()。 現在,讓我們做一些與這三個 學生的姓名和房屋, 一些簡單的像印刷 每出一個句子。 對於int我得到0,我再次小於 學生,我+ +的printf“%s是在%s。 反斜杠N“,現在讓我插上 這兩個字段的值, 學生支架I。名,逗號, 學生支架I。房子,靠近 括號,分號。 現在我需要做的一件事。 在這個文件的底部,我需要 釋放分配的內存 在幕後GetSring(),這 當然調用malloc,為了 為字符串分配內存 用戶類型。 但是,這很簡單。 對於int我得到0,i小於 生,我+ +,和在體內 這個for循環,我只是要 免費提供學生支架我。名字, 和免費的學生支架I。房子。 現在,我們已經清楚地使用了三個for循環 這個程序中,當我真的 可以只使用一種,但這是 只是用於演示的緣故,使 我們可以在三個不同的指定 步驟究竟我們正在做的。 我們首先得到一個名字和一所房子 每個學生,我們則 打印出的名稱和房子 每三個學生,而且 那麼我們要釋放內存 使用的每個學生。 但可以肯定,我們可能已經結合本 成一個較大的for循環。 現在,讓我們保存,編譯, 並運行此程序。 使結構0/0結構,學生的 名字,讓我們提供大衛,他就住 在奧美樓,學生的姓名,讓我們 勞倫說,她會住在萊弗里特 房子,學生的姓名,羅布,他會 住在柯克蘭樓。 事實上,大衛是在奧美, 勞倫是萊弗里特, 和Rob在柯克蘭。