0
//Libraries are called accordingly 
struct std    
{
int a;
char b;
}// a structure with 2 objects

void main()

{

std h[5]; // structure array with 5 elements
int rec_size; // Size of single record to be accessed from the file 
rec_size=sizeof(structure std); // stores the size in bytes

while (true) 
  {
     fread(&h,rec_size,2,fptr); //fptr is a file pointer to some file

    /*Assume that the file pointer(fptr)has covered the last two record 
      blocks and stored
      them in "h". Then the shouldn't the position pointer proceed to end of 
      file and the next statement "if(feof(fptr)" then becomes true to exit 
      the loop and in essence miss out on the processing of those last two 
      record blocks?*/

    if(feof(fptr)) 
     /* Here, if the fptr has reached the end of file after fread(), 
        then this should execute*/                           
      break;

   //else additional code to process the content stored in "h" 
  }
}

我的疑问是,当 fread() 函数返回并在下一个语句 feof() 检查 EOF 时,如果 fread() 处理了文件中的最后两个记录块,feof() 不应该返回 true 吗?有人可以完全解释其功能吗?

4

1 回答 1

1

feof()用于知道您遇到了什么样的错误,而不是检测错误。正确的方法是检查fread()文件末尾的 0 值返回值。那么如果feof()是真的,你就知道你已经达到了EOF,否则就会出现IO错误。

因此,使用您当前的代码,您正在处理最后可读记录的两倍。另外,您的意思是&h[0]而不是&h.

于 2017-04-17T15:36:21.180 回答