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