你好, 欢迎回来｡
在这节课上,
我想 来讨论我们如何从文件中读取文本｡
现在, 我们将 请集中精力阅读文本文件｡
所以如果我们想读字符 我们将使用一些函数｡
第一个将是fgetc｡
这将从文本中读取字符 已打开以供阅读的文件｡
记住, 我们总是要打开 文件,
然后才能对其执行任何文件操作, 除非 它是一个重命名或删除,
然后文件无法打开｡
但如果你想阅读 写入或附加时,
我们必须打开该文件｡
我们知道我们可以敞开心扉 不同模式的文件｡
在阅读的例子中, 我们有 以r或r+开头,
然后我们就可以开始调用fgtc｡
fgetc函数使用
文件指针作为唯一的参数, 它将返回 该字符读作int类型｡
这里有一个例子, 我们创建一个mchar 输入int, 然后输入fgettpfile｡
它会读出一个字符 将pfile作为文件指针导入mchar变量｡
认为pfile已经被 打开返回文件指针｡
mchar是中的类型, 因为
eof是文件结尾的特殊字符, 如果 已到达文件结尾｡
所以我们可以随时检查 整数来查看它是否为eof｡
如果是的话我们不想
我们不想再调用fgetc了｡
函数fgetc, 它是 也可以使用等效于FGTC｡
所以getc几乎与 fgetc, 您只需要使用fgetc｡
我觉得它有一些 更多的保护｡
对于getc, 它需要一个参数｡ 类型file星星的值, 并传回,
然后以int类型传回字符red｡
它实际上与fgetc完全相同｡
他们之间唯一的区别 getc可以实现为宏, 我们甚至不
现在我知道什么是宏了｡
所以我们还是坚持 使用fgtc作为阅读字符的函数｡
您可以读取文件的内容｡
再次, 在必要时, 您可以使用
该倒带函数定位由文件指定的文件 指向文件开头的指针｡
因此, 在以下情况下可以使用倒带 你想再读一遍｡
只要说倒带, 然后 文件指针, 非常简单｡
这里有一个例子｡
您必须包含 标准的io头文件｡
在我们的主要功能中, 我们 来创建文件指针｡
如果我想把它初始化为null 我们要创建一个整数｡
我们要做的第一件事就是
使用f open调用打开文件, 我们将指定 文件名, 我们将指定它是用于阅读的｡
它将返回文件指针｡
所以现在我们的fp指针是 指向一个有效文件｡
如果无法打开文件｡ 文本
路径不对或者其他什么的, 它会返回null｡
所以你要检查null, 请确保fp不为空｡
如果为空, 则退出程序｡
否则, 当你通常 读取字符时,
你会把它们放在一个循环里
所以这里我们说当c 等于fgetc fp, 这是从文件中阅读一个字符,
将文件指针传递给fgtc, fgtc返回一个整数｡
记住我们可以跳出这个循环 如果返回的整数是文件的结尾, 因为我们不希望
以读取超过文件结尾的内容｡
否则, 我们可以打印出 我们的角色使用百分比c和c｡
我们最不想做的就是 关闭文件, 然后设置文件指针
设为null, 然后我们可以传回｡
让我们试着利用它, 代码块内部的代码｡
这是代码块中的程序｡
它说, 这个程序不会 除非我们在程序运行的磁盘上有一个文件｡
所以首先如果我们建造这个, 它应该构建好, 应该创建一个可执行文件
在你的硬盘里
我把我所有的项目 在我的.贷款目录里｡
所以如果我去下载
目录, 然后转到项目名称, 这只是一个测试 所以无论你在哪里存储你的项目, 我的项目都在测试中｡
如果我去测试, 你会看到 在bin目录中,
debug是您的可执行文件｡
您可以在此处创建 如果你有亲戚的话｡
路径, 因此我可以在这里创建一个 一个新文件, 我们可以有它作为一个文本文件,
所以我可以只创建它作为一个文本 文档, 并且必须将其命名为file
然后我会把 里面有些信息｡
我将输入一些数据 例如“嗨, 我是Jason”换行｡
好吧, 不, 等等, 我要把它保存起来｡
此文件必须存在于 才能使此程序正常工作｡
所以我创建了这个文件｡
当我运行它的时候 它将读取我刚刚添加到其中的内容并将其打印出来｡
显示错误和文件打开
文件没有这样的文件目录, 这可能是因为我 请将其放在debug文件夹中｡
这不是在调试中运行｡
让我们试着在调试中运行它, 我想现在应该可以了｡
我们可以说调试, 启动｡
这将查找可执行 希望在debug目录中｡
我们要确保它运行正常｡
还是不存在, 所以你必须使 请确保您知道可执行文件的位置｡
我们去别的地方试试 更好的方法是在调试器中运行可执行文件 目录,
应该可以在那里找到它｡
如果我双击这里, 它实际上这个没有停顿｡
它跳出来了｡
所以你能做的就是
而不是返回, 你可以说系统暂停, 它不会退出 直到您运行它｡
现在让我们来试试｡
所以现在停顿了一下, 没 执行程序｡
你看到的是 嗨, 我是杰森｡
它能够找到文件, 打印出来了, 没打印出来,
然后暂停了｡
否则, 当您执行 程序, 它打印数据如此之快,
并退出 你已经完成了｡
所以这就是你可以测试它的方法｡
它必须存储在可执行文件 存储在它运行的地方｡
它一定是从什么地方跑出来的 else在您的项目目录中｡
我不知道它从哪里来｡
我们可以试着把移动文件 源代码所在的位置｡
可能是从这里开始的｡
所以我们把它放在这里｡
现在我们试着从 身份证也许能用｡
我们不造｡
我们运行它, 它能够找到它｡
所以看起来我们 将文件放在源代码所在的位置｡
所以只要我们把文件 档案中｡
文本, 您就可以看到它｡
这个简单的例子告诉我们 打开文件并读取单个字符,
这不是最有效的 读取文件的方式, 因为通常您需要读取字符串｡
但这会打开它｡
你看到了f开叫, 和 您会注意到while循环｡
这很重要｡
让我们回过头来谈谈 我们可以从一个文件中读取字符串, 这样效率更高｡
这就是阅读一个字符｡
阅读字符串怎么样？
您可以使用fgets函数 以读取任何文件或流｡
这将读取一个字符串｡
它需要一个字符串 具有第一个参数｡
您要 读取, 然后读取实际的文件指针｡
所以这个函数 读取字符串所指向的内存区域中的字符串｡
所以你必须 传入将要存储数据的缓冲区｡
这是一个指针 必须为它分配内存｡
然后它会读到 指定为第三个参数的文件,
该参数是文件指针｡
然后Nchar就会 来表示要读取多少数据｡
如果你把nchars设为10, 它将读入10个字符, 除非它首先遇到换行符｡
所以它要么读作 整行, 否则它将读取您
请在第二个参数中指定｡
行的结尾由 反斜杠n, 以先发生者为准｡
如果换行符是红色的,
它将保留在字符串中, 并且将 附加到字符串末尾｡
所以如果你真的指定了 更多字符, 它会读取到换行字符,
然后
然后得到新行字符并将 结尾为空字符｡
如果没有错误, 则fgets为 返回指针,
也就是第一个参数｡
它将返回一个指针 从函式传回｡
然后它也会 将字符串指针作为第一个参数填充｡
如果有错误, 则返回null｡
然后阅读文件结尾 会导致返回null, 这意味着您读取了所有字符串｡
让我们看一个例子｡
这是我们的主要部分, 我们创建文件指针创建字符串｡
这是一个指针, 我们没有 为它分配任何数据,
我们只创建一个字符数组｡
我们打开文件进行阅读, 阅读只是因为它是休息
我们说如果它是空的, 就跳出来｡
否则, 我们就说fgets, 我们读入60个字符｡
或者,
如果换行符在 一个换行字符会出现然后打印出来 字符串缓冲区中的内容｡
所以str是第一个 传入的字符｡
然后关闭文件指针, 将其设置为null并返回零｡
让我们再看一下 我们代码块IDE内部的这个｡
唯一改变的是 程序实际上是第14到17行
我们使用fgets来读取字符串 然后我们有一个字符串缓冲区｡
因此,
我们还需要创建一个 字符数组, 这是我们字符串, 我们希望它包含60｡
还有60秒
我们将添加一个换行符, 读取59, 然后在其末尾添加换行符｡
所以我们可以说是61｡
然后fgets会在 一个if语句,
它会读入每个字符串, 直到它 遇到60个字符或一个新行, 它会打印出这个字符串｡
你会发现这不是 一个while循环,
这样我们就不会阅读到文件的结尾｡
我们读到的结尾 文件, 则会得到一个空值｡
所以如果我们建造这个, 我们想要 我确信我们的报价是正确的｡
每当你从powerpoint复制 会把引号弄乱｡
我们要确保 我们创建的变量c没有被使用, 没关系｡
让我们继续运行这个程序｡
你看, 嗨, 这是杰森｡
所以实际上在整个 行文本｡
第一行写着｡
所以你会再叫一次 读第二行｡
如果更改了字节数 比如说我们只想读10,
它会在10中读出来, 然后它 将返回这10个字符,
而不是阅读整行｡
所以这里我们就有了hi这个I｡
所以它会读取数字
字符数, 或者直到它获得一行 并将其存储在字符串中｡
Str是字符数组｡
我们打印出来｡
Fgets要多得多 对于阅读是有效的｡
因为我们不是阅读 一个字符,
我们就能阅读更多的数据｡
中的字符 时间不是那么有效｡
现在我们知道如何阅读单 字符,
我们知道如何读入字符串, 直到它们读取新的 行或多个字符｡
但你也可以在 格式化输入｡
所以我们有getc, fgetc, fgets｡
现在我们又有了一个 函数调用fscanf
这是格式化输入｡
格式化的输入是指定的数据 例如具有定界符或具有与之相关联的特定格式｡
此fscanf函数接受文件 然后是一种格式｡
格式与printf类似 格式规范｡
所以如果你想读入整数 或双精度值, 则可以指定文件中引入的数据
它会读到它看到的就像扫描一样 直到它看到一个空白字符｡
所以fscanf的第一个参数 函数是指向标识流的文件对象的指针｡
我们必须知道 我们正在阅读文件
的第二个参数 函数为格式｡
这是一个c字符串, 包含 一个或多个以下项目｡
白色字符, 非空白 字符､ 格式说明符｡
用法与 scanf和printf中的, 而是来自文件｡
在双引号内, 您可以
您可以输入空白或非空白字符, 但是 格式说明符实际上是如何读入数据的｡
然后指定变量 你想把它读进去｡
因此函数返回 返回成功匹配和分配的输入项的数量｡
看起来是这样的｡
你会注意到主要的是 创建三个字符数组str1､ str2和str3,
每个数组只有10个字节｡
我们创建一个名为 年, 我们遇到了一个文件指针｡
我们首先要做的是 我们打开文件｡
在这种情况下, 我们打开 它的阅读和写作｡
但我们不会真的写 我们只需要显示我们从中读取的内容｡
我们检查以确保文件 指针不等于null
而在这里, 我们实际上 在文件fputs中添加一些内容｡
我们还没谈过这个 但这是在写东西
在这里关注fscanf｡
Fscanf将 读入格式化数据｡
所以它要做的 它会读入三个用空格分隔的字符串｡
所以你可以看到 作为空间百分比作为空间百分比s空间百分比d｡
那我们就说我们在哪里
将它们读入三字符数组, 然后 年份, 并且必须指定年份的地址运算符｡
但数据的格式为 写出来的方式｡
当你读到 格式化后,
您必须了解文件的格式以及它是如何编写的｡
这里我们知道文件被写入 通过用空格分隔字符串｡
这就是我们 我会把它念出来｡
所以我们可以阅读它 其中一个调用fscanf｡
我们可以用我们的形式作为说明符
作为第二个参数, 然后为每个参数添加可变数量的参数 以指定要读入的数据｡
然后我们打印出来 data, 年份中的三个字符串,
然后再次关闭文件｡
所以这是三种方法 你可以从一个文件读入数据｡
您可以读入字符, 您可以读入字符串或读取格式化数据｡
你会注意到 与scanf非常相似｡
您可以使用格式说明符, 要读入的变量｡
我们将在 阅读数据, 这将使您更熟悉这一点｡
这是非常基本的｡
你要做你的公开赛
调用时, 您将使用文件指针, 来使用这三个函数｡
-谢谢—谢谢