2 00:00:00,000 --> 00:00:02,760 >> 揚聲器1:讓我們寫一個程序, 提示輸入名稱和用戶 3 00:00:02,760 --> 00:00:04,700 房子的三名學生。 4 00:00:04,700 --> 00:00:08,840 現在,為了存儲這些名字和房子 我們可以使用,什麼的,六個變量。 5 00:00:08,840 --> 00:00:12,260 三個字符串的名稱,和另一 三根弦的房子, 6 00:00:12,260 --> 00:00:16,560 但我們已經知道,我們可以清理 該代碼使用數組代替, 7 00:00:16,560 --> 00:00:20,220 例如大小為3的數組 三個名字,而另一個數組 8 00:00:20,220 --> 00:00:22,110 大小3的房子。 9 00:00:22,110 --> 00:00:25,870 但事實證明,我們可以清理它 進一步的是,居然讓那些 10 00:00:25,870 --> 00:00:30,520 名稱和房屋在一起,使一個 學生的姓名以及他或她的房子 11 00:00:30,520 --> 00:00:34,940 以某種方式封裝,所以 說話,到同一個變量。 12 00:00:34,940 --> 00:00:39,095 >> 要做到這一點,不過,我們需要聲明 我們自己的數據類型,我們自己的類型在C中, 13 00:00:39,095 --> 00:00:42,660 將c的作者並不一定 想起多年前。 14 00:00:42,660 --> 00:00:45,630 要做到這一點,我們可以使用關鍵字 的typedef,隨著 15 00:00:45,630 --> 00:00:47,200 其它關鍵字struct。 16 00:00:47,200 --> 00:00:48,160 讓我們一起來看看。 17 00:00:48,160 --> 00:00:50,650 裡面structs.h的,我已經 得到由開始 18 00:00:50,650 --> 00:00:52,560 包括CS50庫。 19 00:00:52,560 --> 00:00:57,640 我接下來要輸入typedef結構, 然後一個大括號。 20 00:00:57,640 --> 00:01:01,370 裡面的結構的,我要去 指定學生必須有一個 21 00:01:01,370 --> 00:01:04,960 叫名字的字符串,而另一個 字符串被稱為房子。 22 00:01:04,960 --> 00:01:08,430 我打算再關閉我的花括號, 並指定名稱 23 00:01:08,430 --> 00:01:11,420 這個新的數據類型應為學生。 24 00:01:11,420 --> 00:01:15,550 換句話說,通過這個語法有我 宣布我自己的一個新的數據類型 25 00:01:15,550 --> 00:01:19,910 根本不存在剛才和 這種數據類型的內部有兩個數據 26 00:01:19,910 --> 00:01:24,270 字段或數據成員,一個叫名字, 一個叫房子,這兩者 27 00:01:24,270 --> 00:01:25,630 為string類型。 28 00:01:25,630 --> 00:01:27,690 >> 現在,讓我們使用這種類型的 在實際的程序。 29 00:01:27,690 --> 00:01:30,210 30 00:01:30,210 --> 00:01:34,090 在structs0.c,我已經得到了類似 我已經開始與一些 31 00:01:34,090 --> 00:01:36,999 樣板代碼,而且我現在 要使用該數據 32 00:01:36,999 --> 00:01:39,100 學生類型,如下所示。 33 00:01:39,100 --> 00:01:42,450 我首先要聲明一個 學生類型數組,我會 34 00:01:42,450 --> 00:01:43,920 調用數組的學生 - 35 00:01:43,920 --> 00:01:44,630 複數 - 36 00:01:44,630 --> 00:01:49,360 我會指定它的大小將 三種,其中,通知,很值 37 00:01:49,360 --> 00:01:50,880 不斷的學生 - 38 00:01:50,880 --> 00:01:51,890 在所有的首都 - 39 00:01:51,890 --> 00:01:54,930 我已經聲明了這裡, 前面的文件中。 40 00:01:54,930 --> 00:01:58,280 現在讓我們遍歷這三個 學生,並提示用戶 41 00:01:58,280 --> 00:02:00,050 他們的名字和房屋。 42 00:02:00,050 --> 00:02:05,422 >> 對於int我得到0,i小於 較恆定的,我+ +。 43 00:02:05,422 --> 00:02:08,600 而現在這個體內的內 環,我要打印出來的東西 44 00:02:08,600 --> 00:02:11,470 像學生的名字。 45 00:02:11,470 --> 00:02:14,890 我當時要去真正享受 通過指定學生的姓名 46 00:02:14,890 --> 00:02:17,290 學生支架I。 47 00:02:17,290 --> 00:02:21,550 換句話說,我想第i個學生 在被稱為學生的陣列,但現在 48 00:02:21,550 --> 00:02:25,340 我想獲得在該第i個學生 名,而要做到這一點,我將使用 49 00:02:25,340 --> 00:02:30,160 本。運營商,以獲得在一個 該結構的特定領域內。 50 00:02:30,160 --> 00:02:37,100 所以我指定學生支架I。名稱 得到的GetString的返回值()。 51 00:02:37,100 --> 00:02:40,310 同時,我要打印出來 類似的東西,說學生 52 00:02:40,310 --> 00:02:45,410 房子,現在我要指定 即第i個學生家場 53 00:02:45,410 --> 00:02:49,480 將得到的返回值 另一個電話給GetString()。 54 00:02:49,480 --> 00:02:52,350 >> 現在,讓我們做一些與這三個 學生的姓名和房屋, 55 00:02:52,350 --> 00:02:56,230 一些簡單的像印刷 每出一個句子。 56 00:02:56,230 --> 00:03:07,580 對於int我得到0,我再次小於 學生,我+ +的printf“%s是在%s。 57 00:03:07,580 --> 00:03:12,600 反斜杠N“,現在讓我插上 這兩個字段的值, 58 00:03:12,600 --> 00:03:19,055 學生支架I。名,逗號, 學生支架I。房子,靠近 59 00:03:19,055 --> 00:03:21,290 括號,分號。 60 00:03:21,290 --> 00:03:23,020 >> 現在我需要做的一件事。 61 00:03:23,020 --> 00:03:26,600 在這個文件的底部,我需要 釋放分配的內存 62 00:03:26,600 --> 00:03:30,290 在幕後GetSring(),這 當然調用malloc,為了 63 00:03:30,290 --> 00:03:32,500 為字符串分配內存 用戶類型。 64 00:03:32,500 --> 00:03:35,720 但是,這很簡單。 65 00:03:35,720 --> 00:03:42,610 對於int我得到0,i小於 生,我+ +,和在體內 66 00:03:42,610 --> 00:03:48,670 這個for循環,我只是要 免費提供學生支架我。名字, 67 00:03:48,670 --> 00:03:52,300 和免費的學生支架I。房子。 68 00:03:52,300 --> 00:03:55,620 >> 現在,我們已經清楚地使用了三個for循環 這個程序中,當我真的 69 00:03:55,620 --> 00:03:58,800 可以只使用一種,但這是 只是用於演示的緣故,使 70 00:03:58,800 --> 00:04:02,850 我們可以在三個不同的指定 步驟究竟我們正在做的。 71 00:04:02,850 --> 00:04:06,120 我們首先得到一個名字和一所房子 每個學生,我們則 72 00:04:06,120 --> 00:04:08,900 打印出的名稱和房子 每三個學生,而且 73 00:04:08,900 --> 00:04:11,910 那麼我們要釋放內存 使用的每個學生。 74 00:04:11,910 --> 00:04:15,310 但可以肯定,我們可能已經結合本 成一個較大的for循環。 75 00:04:15,310 --> 00:04:18,650 >> 現在,讓我們保存,編譯, 並運行此程序。 76 00:04:18,650 --> 00:04:26,850 使結構0/0結構,學生的 名字,讓我們提供大衛,他就住 77 00:04:26,850 --> 00:04:31,580 在奧美樓,學生的姓名,讓我們 勞倫說,她會住在萊弗里特 78 00:04:31,580 --> 00:04:36,590 房子,學生的姓名,羅布,他會 住在柯克蘭樓。 79 00:04:36,590 --> 00:04:39,440 事實上,大衛是在奧美, 勞倫是萊弗里特, 80 00:04:39,440 --> 00:04:40,810 和Rob在柯克蘭。 81 00:04:40,810 --> 00:04:43,425