开发者

End of file marker / file scans

I'm having trouble with file scans and are these 2 expressions equivalent to each other in the manner that they operate?

#include <stdio.h>
FILE *point;
int number

 while ( fscanf(point, "%d", &number) != -1)

 while ( !feof(point) )

(test file):

39203 Thao Nguyen

92039 Steven Gonzales

For some reason the first statement works for me but the second statement just gives me seg faults, because it keeps reading the file when there not left to be read.

I tried a third way

 while ( point != EOF) // but this gives me a error 开发者_如何学JAVAof integer to pointer error 


EOF is a constant defined in stdio.h usually as -1. That's the reason that the first one happens to work for you. However, it's bad practice to use the literal -1 as an implementation can theoretically define EOF however it wants. So you really want to do something along the lines of while ( fscanf(point, "%d", &number) != EOF )

See the fscanf man page:

http://www.kernel.org/doc/man-pages/online/pages/man3/scanf.3.html


No, these two are not the same:

while ( fscanf(point, "%d", &number) != -1)
while ( !feof(point) )

fscanf can return EOF (which you should be using rather than -1) for multiple reasons:

If the input ends before the first matching failure or conversion, EOF shall be returned. If any error occurs, EOF shall be returned, and errno shall be set to indicate the error.

But feof:

The feof() function shall return non-zero if and only if the end-of-file indicator is set for stream.


the first statement:

while ( fscanf(point, "%d", &number) != -1)

will ultimately consume the contents of your file (when fscanf returns -1 in most cases, which is EOF) while:

while ( !feof(point) )

will just give you and endless loop since feof just checks if it is the end of file. you need to have something to make your file position pointer move forward.

while ( point != EOF)

will give you and error since point is a pointer to a FILE structure while EOF is an int (as far as EOF is defined most of the time)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜