home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / lang / c / 16405 < prev    next >
Encoding:
Text File  |  1992-11-12  |  2.6 KB  |  77 lines

  1. Newsgroups: comp.lang.c
  2. Path: sparky!uunet!portal!dfuller
  3. From: dfuller@portal.hq.videocart.com (Dave Fuller)
  4. Subject: Re: problem with foef()
  5. Message-ID: <BxMCIJ.L8M@portal.hq.videocart.com>
  6. Organization: VideOcart Inc.
  7. X-Newsreader: Tin 1.1 PL3
  8. References: <92316.213238U17868@uicvm.uic.edu>
  9. Date: Thu, 12 Nov 1992 19:51:54 GMT
  10. Lines: 65
  11.  
  12. U17868@uicvm.uic.edu () writes:
  13. : i
  14. : I am reading a binary file with fread. The file has only two records each of si
  15. : ze 193 bytes. The problem is that after reading the second record (structure) t
  16. : he feof function does not detects the end of file and goes through the loop one
  17. :  more time (third time). I check with the ftell fucntion the position of the
  18. : file_pointer (pointer to the file that I am reading). First time it gives the p
  19. : osition at 193 i.e after reading the first record. Second time it shows the pos
  20. : ition of the file_pointer at 386 which is correct. Now, I don't have any more r
  21. : ecords in the file. But, it goes again and reads the same last record again. Th
  22. : e position of the file_pointer is still 386. After reading the same record, feo
  23. : f detects the end of file and returns.  any suggestions
  24. : thanks in advance
  25. : u17868@uicvm.cc.uic.edu
  26. : sikander
  27. :  my program is listed below
  28. : #include "header.h"
  29. : void dispdail(date)
  30. : char date[9];
  31. : {
  32. : int i,j, a;
  33. : FILE *file_pointer;
  34. : struct activity temp;
  35. :  file_pointer = fopen("activity.dat","rb");
  36. :  fseek(file_pointer,0,0);
  37. :        while(!feof(file_pointer))
  38. :   {
  39. :     fread(&temp, sizeof(temp),1,file_pointer);
  40. :     j = strcmp(date,temp.date);
  41. :     if(j == 0)
  42. :         printf("%s",temp.date);
  43. :      if(a = (feof(file_pointer)) != 0)
  44. :         {
  45. :          fclose(file_pointer);
  46. :          return;
  47. :         }
  48. :   }/* end while */
  49. : }   /* end dispdail */
  50.  
  51. a couple of things. feof returns non-zero after the first attempt to read
  52. PAST the end of the file. possibly you have a spare char out there that
  53. makes it NOT a read past EOF.
  54.  
  55. also fread returns the number of elements read, you don't check this value.
  56.  
  57. here is what i believe happens:
  58. after the 2nd read, feof doesn't return non-zero
  59. fread can't read the element and returns a 0 for # of elements read
  60.    (it is at this point that the file pointer is positioned at the EOF)
  61.    ( also fread won't null the buffer. if it reads 0 items, it leaves
  62.      the buffer intact. this is why you see all of the information from
  63.      the 2nd read a 3rd time)
  64. the next feof does try to read past EOF and the boolean test works.
  65.  
  66.  
  67. what you will want to do to guarantee success is to test the return
  68. value of fread also.
  69.  
  70. Dave Fuller 
  71. dfuller@portal.hq.videocart.com
  72.  
  73.