提问人:Adiel 提问时间:4/30/2014 更新时间:4/30/2014 访问量:2137
C - feof 和 fseek 替换/等效代码?
C - feof and fseek replacement/equivalent code?
问:
我一直在我的代码中使用上述函数,现在发现我们不允许这样做。 也许有人可以帮助实现替代功能? 我只允许使用 Fgets,fgetc,fputc,fprintf,sprintf,fscanf,sscanf,rewind,stdin,stdout....
关于fseek 我有一个大致的想法,关于获取我需要跳到内部字符串中的字符 这是正确的想法吗?
如果有人能帮忙,我会很高兴。 多谢!
答:
1赞
Sjoerd
4/30/2014
#1
显然,您只能从 stdin 读取,它不支持查找,但支持文件末尾。
- 要跳过字符,只需使用 fread 将它们读入缓冲区,然后忽略缓冲区中的结果。
- 要检测文件末尾,请检查 fread 的返回值。如果 fread 返回 0,则没有更多内容可读取(或发生错误)。
评论
0赞
Adiel
4/30/2014
谢谢,但我现在可以使用面包:|谢谢大家,我已经想通了。查看我对蒂莫西·琼斯(Timothy Jones)的评论:)
1赞
Timothy Jones
4/30/2014
#2
我认为这些功能是被禁止的,因为某些分配限制,而不是技术?这取决于你想做什么:
feof()
用于确定流是否位于文件末尾fseek()
用于移动到该文件中的特定位置。
您可以确定流在读取时是否位于文件末尾。例如,在手册页中:fscanf
如果在发生任何转换(如文件结束)之前发生输入失败,则返回该值。
EOF
要在不使用 的情况下在文件中移动,可以使用允许列表中的 。
从手册页:fseek()
rewind()
rewind()
rewind() 函数将流指向的流的文件位置指示器设置为文件的开头。它相当于:
(void)fseek(stream, 0L, SEEK_SET)
从那里开始,你必须读到你想读的点。seek()
评论
0赞
Adiel
4/30/2014
嘿,由于分配限制,我不允许。
0赞
Timothy Jones
4/30/2014
还行。我的建议有帮助吗,还是你仍然卡住了?
0赞
Adiel
4/30/2014
我很抱歉从我的手机上发布的简短评论。如前所述,由于分配限制,我不允许使用这些功能。根据你们所有人的评论,有点认为我管理了一个解决方法。替换后,我使用了一个 int 标志 - end_of_file = fscan(...) 并在之后检查了有关 fseek 的标志,我需要在流中前进而不是后退,所以我使用了 fscanf(file, “%*[^\n]%*c”) 并且它工作完美,并将位置指示器移动到下一行的开头,而不会“收集”不需要的文本。谢谢大家,祝大家度过愉快的一周\周末:)
评论
while (!feof(file))
is always wrong for more information about that.你需要去哪里寻找?如果它回到起点,那就有效了。如果它是你读过的地方,那么就可以使用了。fseek()
feof()
rewind()
fgetpos()
fsetpos()
fseek()
rewind()