找不到函数fseek()的错误

时间:2015-05-08 23:50:57

标签: c

我编写了这段代码,似乎函数fseek()存在问题。因为它会影响文本文件的读取。它使函数fscanf()读取文件中的垃圾和错误的数据。我的文件只包含浮点数。

FILE *fptr;
if ( !( fptr = fopen( "saving.txt", "r" ))){
    printf( "File could not be opened to retrieve your data from it.\n" );
}
else {
    fseek(fptr, 0, SEEK_END);
    unsigned long len = (unsigned long)ftell(fptr);
    if (len > 0) {  //check if the file is not empty.
        while ( !feof( fptr ) ){
            fscanf( fptr,"%f\n", &p.burst_time );
            //printf("time = %f\n",p.burst_time);
            AddProcess(&l,p.burst_time);
        }
    }
    fclose( fptr );
}

提示:这段代码知道文件是否为空。如果没有从中读取。我也使用函数rewind(fptr);在循环之前,但没有区别。谢谢。

1 个答案:

答案 0 :(得分:0)

仅查看代码的摘录:

fseek(fptr, 0, SEEK_END);
unsigned long len = (unsigned long)ftell(fptr);
if (len > 0) {  //check if the file is not empty.
    while ( !feof( fptr ) ){
        fscanf( fptr,"%f\n", &p.burst_time );

出于某种原因,在进行任何读取之前,您正在寻找文件的末尾。我假设你这样做是为了弄清楚文件的大小。

你得到疯狂输出的原因是你实际上没有读过任何内容,所以feof在第一次通过之前无法返回文件结尾。

我建议您在fseek(fptr, 0, SEEK_SET);声明之前添加while来解决此问题。