扬声器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或数字。