揚聲器1:讓我們寫一個程序, 提示輸入名稱和用戶 房子的三名學生。 但是,而不是僅僅打印出自己的 名稱和房屋到屏幕上,讓我們 而不是信息保存到磁盤。 換句話說,讓我們來創建,也就是說,一個CSV 文件,逗號分隔值, 這實際上只是一個文本文件, 如Excel或數字節目 可以打開,並有效地挽救那些 名稱和房屋永久使 我們可以稍後再檢討。 要做到這一點,讓我們先來看看 有的,我已經樣板代碼 開始了。 首先是在文件頭中注意 往上頂現在的標準lib.h這 恰好有相關的一些功能 文件I / O,文件的輸入和輸出。 請注意,我還宣布 一個叫學生常數 - 在全部大寫 - 其值 被硬編碼為三人。 現在,請注意我的主要的是內部 節目中,我聲明數組 大小的3使用常數,稱為 每一個其成員的學生是 型的學生。 現在回想一下,一個學生,我們將定義 作為具有這兩者的名稱和房子 這是字符串按照本 聲明指示,點小時。 現在又回到structs1.c,請注意,我 有一個for循環在這裡,那將 從零循環最多三個。 它會提示我的一個學生的 姓名和學生的家 一遍又一遍又一遍。 那麼在這個程序的底部, 請注意,我有另外一個循環 那就是要釋放的第i個學生的 名和第i個學生的家中 類似構造的環路。 可以肯定的是,我們可以結合這些循環 成只有一個,但我想 有一些不同的代碼段 為便於討論在這裡。 現在,在那些環之間,讓我們 其實有另外一個,而這一次的 生活的目的是實際保存所有 這些名稱和房子,是 目前在RAM磁盤的形式 以逗號分隔的值。 要做到這一點,我們將使用 三個新功能 - F開,F的printf和F接近,這 打開一個文件,打印到文件,並 關閉一個文件。 我們可以使用它們,如下所示。 文件中,在全部大寫,這是有點 在C好奇心,文件被FOPEN 報價引文結束,現在的名稱 文件,比方說,students.CSV,但我可以 叫它任何東西,逗號,現在我 要指定一個單片,內 雙引號。 W,正如你可能已經猜到了, 指的fopen應該打開這個文件 所謂Students.CSV寫了這麼 我們實際上可以節省一些 內容到它。 讓我們接下來的檢查,如果文件 不等於空。 因為如果是這樣,有些事情可能 出了錯在這種情況下,我們 不應繼續嘗試 打印任何東西給它。 但如果它不為空,然後把裡面的 大括號我要遍歷 從i等於0就起來給學生, 而我要去 增加我在每個迭代。 而這個循環中,我要 所以FPRINTF為打印到文件 - 特別是一 我已經打開了 - 一個字符串,它看起來像這樣%S,%s的 反斜線N分別閉合引號。 現在我想插入到每個 這些佔位符的實際值 一個學生的名字和一所房子 使用點運算符。 學生支架i.name,學生 支架i.house接近括號 分號。 現在,下面這個for循環,我只是 要調用的文件FCLOSE為了 最終關閉文件。 現在,當我運行這個程序,我不應該 實際看到的東西 屏幕上,但我應該有運行後, 這個程序一個名為 Students.CSV在同一個目錄 我在應該運行該命令 包含一個逗號分隔 值列表。 讓我們一起來看看。 使結構1 / structs1學生 名字,讓我們說大衛, 他會住在馬瑟。 學生的名字,讓我們說,勞倫, 她會住在萊弗里特。 學生的名字,讓我們說,羅布, 他會住在柯克蘭。 現在,再次,正如所料,沒有出現 已經發生的事情,但讓我 在命令提示符,然後鍵入前進 在希望克編輯students.CSV的 該文件確實存在。 gedit的students.CSV ENTER鍵,而事實上, 請注意,包含純粹的文件 用逗號文本,但文本分隔 每個字段,的確存在。 而如果我們使用,而不是CS50 家電,而是一個更熟悉的Mac或 電腦,事實證明,我們確實可以 以更加開放的這個CSV文件 熟悉程序如Excel或數字。