你好, 欢迎回来｡
在这堂课中, 我将为我们之前的挑战提供一个演示,
那就是以相反的顺序打印文件的内容｡
所以你需要理解ftel方法和fseek方法｡
让我们打开代码块, 然后创建一个新项目｡
这个项目将是一个控制台应用程序｡
我们将其命名为打印文件内容｡
我们将首先创建一个文件, 其中包含一些空数据,
因为我们需要从中读取数据｡ 我将返回到我的下载目录, 这是我的代码块项目所在的目录｡
我将转到我刚创建的项目, 该项目名为“打印文件内容”｡
所以就在这里｡ 我将创建一个新文件, 即文本文件｡
我们会说新的文本文档｡ 我们将其命名为test｡ 文本中｡
然后在这里, 我会做正常的你好, 我叫杰森,
你好, 我很好｡
我会把它保存起来, 然后我们开始打印结尾.
所以它应该打印出enif, space, gniod等等, 直到它到达开头｡
我们将返回到代码块,
并且需要包括标准IO, 因为它包含所有函数｡
我们将创建一个常量, 在本例中为define｡
这个叫做文件名, 这个叫做测试｡ 文本中｡
首先我需要创建一个文件指针, 所以全部大写的FILE, 星星, fp,
我会把它设为null, 初始化它｡
然后我还要创建几个计数器和一些东西来表示从, 返回的内容我将为循环携带计数器, 然后是从,
ftell返回的实际字节数｡
所以我会说count等于0,
然后循环控制变量I等于0｡
我会做我的正常｡ 我需要打开我的档案｡
我将输入fp等于fopen, 并传入文件名｡ 我将传入只读, 所以只是r｡
我会确保它不为空｡ 所以我会说如果fp等于null, 那么我只会返回一个-1｡
否则, 我将查找到文件的末尾｡
所以我想做一个fseek｡
这里我将调用fseek函数｡
这将改变我所指的位置｡ 我将传入我的文件指针｡
我将为第二个参数传入0｡
对于第三个参数, 我会说“搜索到结尾”｡
所以我将使用常数查找结束｡
这会把我的文件指针设置到fp的末尾, 也就是test｡
文本中｡
一旦我到了最后, 我想把我的计数器设置成它所指向的是｡
所以我想回到我现在的位置｡
这里我将得到文件指针的位置｡
而fseek实际上改变了位置, 所以它把文件指针移到了文件的结尾｡
所以我先移动它, 然后我得到的位置｡ 我可以用ftell得到位置｡
对于ftell, 它返回位置, 所以它将被存储在count中,
我会说f count等于f tell, 然后把它传递到文件指针中｡
一旦我有了位置,
我就可以写一个while循环, 从位置或者计数器开始, 一直到结束｡
所以这里我可以说, 虽然我是少于计数,
因为我想基本上读在一切从结束到开始｡
所以在这里, 我想增加变量I｡
然后我想寻找, 我想改变我要去的地方｡ 所以我想说fseek, 我想指向fp｡
我想指出一个否定的I,
因为我是从后面回到开头, 我想说的是, 寻找结尾｡
所以负的I是从末尾算起的很多字节｡
所以首先我能够移动到最后,
然后我想改变我的位置, 这样我就可以开始在每个字符中阅读｡
一旦我真的找到了结尾, 我就可以打印出字符,
阅读字符并打印出来｡
所以这里我可以输入percent c,
然后输入fgetc和文件指针｡
我现在要做的是, 在第22行或者第19行, 首先,
我把指针移到最后｡
然后我得到了计数器, 因为它会告诉我, 用ftell, 读取每个字节需要多长时间｡
然后我的while循环会从零开始, 一路计数,
我想读入多少字节｡
在第26行, 我将递增计数器｡
然后我会从最后开始查找, 也就是从最后开始减去I｡
然后第28行, 我将读入这个字符并打印出来｡
这就是这个程序的主要逻辑｡
我唯一要做的其他事情是我想在最后打印出一个换行符, 只是为了让它更容易阅读｡
我想关闭文件指针｡
我想输入fp, 然后返回,
我可能想把fp设为null｡
让我们试着编译一下, 我们希望看到的是文件以相反的顺序打印｡
我们并没有改变文件的内容, 我们只是用位置函数, 从头到尾阅读文件.
所以当我们运行这个程序时, 我们应该看到相反的顺序｡
你会注意到这里我们看到的是相反的顺序｡
所以我们先打印出最后一个文件｡
如果我们在下载目录中打开该文件, 您会注意到它将作为输出打印出来｡
它打印出了宇宙神之类的东西｡
打印出来的最后一行是“嗨, 我的名字是Jason”, 反向显示｡
所以这只是一个简洁的小程序, 它将使用文件指针从末尾开始, 然后转到开头,
并以相反的顺序打印出内容｡
注意我们是如何使用fseek, 注意我们是如何使用ftell的｡
Fseek移动文件指针, ftell实际上得到你在文件的位置｡
所以现在你可以用计数来倒过来｡
然后再一次, 用负的I表示从末尾算起的字节数, 用fgetc表示文件指针｡
我将提供这个源代码作为解决方案, 您可以比较它, 查看它,
并更详细地分析它｡ 希望这对你有帮助｡ -谢谢—谢谢