Tuesday 25 April 2017

c - feof(in) != EOF doesn't make while loop stop when at the end of file?




int main ()
{
FILE *in;
in = fopen("input.txt","r");
char c = fgetc(in);
while(feof(in) != EOF)
{

printf("%c",c);
c = fgetc(in);
}
}


feof(in) != EOF doesn't stop the while loop from stopping but something like !feof(in) seems to work. Any ideas?


Answer



feof doesn't return EOF on end of file; it returns true, which is not equal to EOF.




fgetc will return EOF when it hits end-of-file. Your code should be written as



int main ()
{
FILE *in;
in = fopen("input.txt","r");
int c = fgetc(in); // note int not char
while(c != EOF) // compare c to EOF
{
printf("%c",c);

c = fgetc(in);
}
}


You should not use feof as a loop condition, as it won't return true until after you attempt to read past the end of the file, meaning your loop will execute once too often.


No comments:

Post a Comment

c++ - Does curly brackets matter for empty constructor?

Those brackets declare an empty, inline constructor. In that case, with them, the constructor does exist, it merely does nothing more than t...