c++文件操作中的fseek函数错误,代码如下。求解决,高额悬赏。
问题1不同大小的文件,有时会出现刚开始ftell返回负值,如图,导致fseek(fpIn,-1,1)直接让文件指针跳到了文件末尾。问题2对于比较大的文件,如果没有问题1,...
问题1 不同大小的文件,有时会出现刚开始ftell返回负值,如图,导致fseek(fpIn,-1,1)直接让文件指针跳到了文件末尾。问题2 对于比较大的文件,如果没有问题1,程序最后会进入死循环,见图,ftell()的值反复,feof()无法检测到文件结尾。#include <stdio.h>#include <stdlib.h>void main() { FILE *fpIn, *fpOut; if ((fpIn = fopen("C:/earthquake data/input/test.dat", "r")) == NULL){ puts("Can't open the input file!"); exit(1); } if ((fpOut = fopen("C:/earthquake data/output/test.dat", "w")) == NULL) { puts("Can't open the output file!"); exit(1); } char str1[3]; printf("A:%d\n",ftell(fpIn)); while ((fgets(str1, 3, fpIn)) != NULL) { printf("B:%d\n", ftell(fpIn)); fflush(fpIn); fputs(str1,fpOut); fflush(fpOut); if (feof(fpIn)) { break; } fseek(fpIn,-1,1); printf("C:%d\n", ftell(fpIn)); }}
展开
展开全部
你得讲清楚你的程序原来的目的是什么
文本文件很少用ftell,fseek的用法显然也有问题(第三个参数应该是宏SEEK_SET或者SEEK_CUR,而不是任何具体数值)
文本文件很少用ftell,fseek的用法显然也有问题(第三个参数应该是宏SEEK_SET或者SEEK_CUR,而不是任何具体数值)
更多追问追答
追问
SEEK_CUR的值就是1。ftell只是用来找错的,没有它也没有关系的。这个程序就是用来在一个文件中按自己想要的位置提取字符后输入另一个文件中,讲白了就是学习怎么使用哪些文本操作函数的。然后在ftell()和fseek()的用法上遇到了上述问题,我实在没办法理解了,就来求大佬帮忙了。
追答
"SEEK_CUR的值就是1"——即使在你的编译环境里成立,也不应该这样用,宏才是可移植的
如果只是为了学习文件相关的函数,可以用更简单的例子,比如
/* fseek example */
#include <stdio.h>
int main ()
{
FILE * pFile;
pFile = fopen ( "example.txt" , "wb" );
fputs ( "This is an apple." , pFile );
fseek ( pFile , 9 , SEEK_SET );
fputs ( " sam" , pFile );
fclose ( pFile );
return 0;
}
简单的例子都通过了之后再开始逐步尝试组合的例子
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询