2 00:00:00,000 --> 00:00:02,470 >> 揚聲器1:讓我們寫一個程序, 提示輸入名稱和用戶 3 00:00:02,470 --> 00:00:03,990 房子的三名學生。 4 00:00:03,990 --> 00:00:07,300 但是,而不是僅僅打印出自己的 名稱和房屋到屏幕上,讓我們 5 00:00:07,300 --> 00:00:09,660 而不是信息保存到磁盤。 6 00:00:09,660 --> 00:00:14,530 換句話說,讓我們來創建,也就是說,一個CSV 文件,逗號分隔值, 7 00:00:14,530 --> 00:00:17,720 這實際上只是一個文本文件, 如Excel或數字節目 8 00:00:17,720 --> 00:00:21,690 可以打開,並有效地挽救那些 名稱和房屋永久使 9 00:00:21,690 --> 00:00:23,220 我們可以稍後再檢討。 10 00:00:23,220 --> 00:00:25,960 >> 要做到這一點,讓我們先來看看 有的,我已經樣板代碼 11 00:00:25,960 --> 00:00:27,650 開始了。 12 00:00:27,650 --> 00:00:32,380 首先是在文件頭中注意 往上頂現在的標準lib.h這 13 00:00:32,380 --> 00:00:36,710 恰好有相關的一些功能 文件I / O,文件的輸入和輸出。 14 00:00:36,710 --> 00:00:39,560 請注意,我還宣布 一個叫學生常數 - 15 00:00:39,560 --> 00:00:42,380 在全部大寫 - 其值 被硬編碼為三人。 16 00:00:42,380 --> 00:00:45,820 現在,請注意我的主要的是內部 節目中,我聲明數組 17 00:00:45,820 --> 00:00:50,270 大小的3使用常數,稱為 每一個其成員的學生是 18 00:00:50,270 --> 00:00:51,650 型的學生。 19 00:00:51,650 --> 00:00:56,150 >> 現在回想一下,一個學生,我們將定義 作為具有這兩者的名稱和房子 20 00:00:56,150 --> 00:01:00,410 這是字符串按照本 聲明指示,點小時。 21 00:01:00,410 --> 00:01:04,680 現在又回到structs1.c,請注意,我 有一個for循環在這裡,那將 22 00:01:04,680 --> 00:01:06,750 從零循環最多三個。 23 00:01:06,750 --> 00:01:10,020 它會提示我的一個學生的 姓名和學生的家 24 00:01:10,020 --> 00:01:12,310 一遍又一遍又一遍。 25 00:01:12,310 --> 00:01:15,620 >> 那麼在這個程序的底部, 請注意,我有另外一個循環 26 00:01:15,620 --> 00:01:19,970 那就是要釋放的第i個學生的 名和第i個學生的家中 27 00:01:19,970 --> 00:01:21,570 類似構造的環路。 28 00:01:21,570 --> 00:01:24,480 可以肯定的是,我們可以結合這些循環 成只有一個,但我想 29 00:01:24,480 --> 00:01:28,180 有一些不同的代碼段 為便於討論在這裡。 30 00:01:28,180 --> 00:01:31,920 >> 現在,在那些環之間,讓我們 其實有另外一個,而這一次的 31 00:01:31,920 --> 00:01:35,210 生活的目的是實際保存所有 這些名稱和房子,是 32 00:01:35,210 --> 00:01:39,810 目前在RAM磁盤的形式 以逗號分隔的值。 33 00:01:39,810 --> 00:01:42,080 要做到這一點,我們將使用 三個新功能 - 34 00:01:42,080 --> 00:01:47,450 F開,F的printf和F接近,這 打開一個文件,打印到文件,並 35 00:01:47,450 --> 00:01:48,440 關閉一個文件。 36 00:01:48,440 --> 00:01:49,690 我們可以使用它們,如下所示。 37 00:01:49,690 --> 00:01:52,110 38 00:01:52,110 --> 00:01:58,240 >> 文件中,在全部大寫,這是有點 在C好奇心,文件被FOPEN 39 00:01:58,240 --> 00:02:03,020 報價引文結束,現在的名稱 文件,比方說,students.CSV,但我可以 40 00:02:03,020 --> 00:02:08,150 叫它任何東西,逗號,現在我 要指定一個單片,內 41 00:02:08,150 --> 00:02:09,390 雙引號。 42 00:02:09,390 --> 00:02:13,290 W,正如你可能已經猜到了, 指的fopen應該打開這個文件 43 00:02:13,290 --> 00:02:17,360 所謂Students.CSV寫了這麼 我們實際上可以節省一些 44 00:02:17,360 --> 00:02:19,370 內容到它。 45 00:02:19,370 --> 00:02:23,080 >> 讓我們接下來的檢查,如果文件 不等於空。 46 00:02:23,080 --> 00:02:25,860 因為如果是這樣,有些事情可能 出了錯在這種情況下,我們 47 00:02:25,860 --> 00:02:28,340 不應繼續嘗試 打印任何東西給它。 48 00:02:28,340 --> 00:02:33,400 但如果它不為空,然後把裡面的 大括號我要遍歷 49 00:02:33,400 --> 00:02:38,030 從i等於0就起來給學生, 而我要去 50 00:02:38,030 --> 00:02:40,180 增加我在每個迭代。 51 00:02:40,180 --> 00:02:45,750 而這個循環中,我要 所以FPRINTF為打印到文件 - 52 00:02:45,750 --> 00:02:47,940 特別是一 我已經打開了 - 53 00:02:47,940 --> 00:02:54,650 一個字符串,它看起來像這樣%S,%s的 反斜線N分別閉合引號。 54 00:02:54,650 --> 00:02:58,790 >> 現在我想插入到每個 這些佔位符的實際值 55 00:02:58,790 --> 00:03:03,390 一個學生的名字和一所房子 使用點運算符。 56 00:03:03,390 --> 00:03:10,030 學生支架i.name,學生 支架i.house接近括號 57 00:03:10,030 --> 00:03:11,230 分號。 58 00:03:11,230 --> 00:03:16,180 現在,下面這個for循環,我只是 要調用的文件FCLOSE為了 59 00:03:16,180 --> 00:03:18,520 最終關閉文件。 60 00:03:18,520 --> 00:03:21,360 >> 現在,當我運行這個程序,我不應該 實際看到的東西 61 00:03:21,360 --> 00:03:25,010 屏幕上,但我應該有運行後, 這個程序一個名為 62 00:03:25,010 --> 00:03:29,130 Students.CSV在同一個目錄 我在應該運行該命令 63 00:03:29,130 --> 00:03:32,480 包含一個逗號分隔 值列表。 64 00:03:32,480 --> 00:03:34,790 讓我們一起來看看。 65 00:03:34,790 --> 00:03:41,690 >> 使結構1 / structs1學生 名字,讓我們說大衛, 66 00:03:41,690 --> 00:03:43,140 他會住在馬瑟。 67 00:03:43,140 --> 00:03:46,890 學生的名字,讓我們說,勞倫, 她會住在萊弗里特。 68 00:03:46,890 --> 00:03:50,800 學生的名字,讓我們說,羅布, 他會住在柯克蘭。 69 00:03:50,800 --> 00:03:54,050 現在,再次,正如所料,沒有出現 已經發生的事情,但讓我 70 00:03:54,050 --> 00:03:58,790 在命令提示符,然後鍵入前進 在希望克編輯students.CSV的 71 00:03:58,790 --> 00:04:00,850 該文件確實存在。 72 00:04:00,850 --> 00:04:07,010 >> gedit的students.CSV ENTER鍵,而事實上, 請注意,包含純粹的文件 73 00:04:07,010 --> 00:04:11,320 用逗號文本,但文本分隔 每個字段,的確存在。 74 00:04:11,320 --> 00:04:14,530 而如果我們使用,而不是CS50 家電,而是一個更熟悉的Mac或 75 00:04:14,530 --> 00:04:18,080 電腦,事實證明,我們確實可以 以更加開放的這個CSV文件 76 00:04:18,080 --> 00:04:20,400 熟悉程序如Excel或數字。 77 00:04:20,400 --> 00:04:22,906