C:feof的奇怪行为

C:feof的奇怪行为,c,fseek,feof,C,Fseek,Feof,我是C的新手。我偶然发现了一些我无法解释的feof的行为。特别是在下面的代码中,我创建了一个文件,在其中写入一个字节的信息,然后关闭并再次打开它,读取信息(我的1个字节),直到达到EOF,然后将文件指针的当前位置移动0字节(即根本不更改当前位置)突然间,我不再处于EOF。为什么 #include <stdio.h> #include <stdint.h> typedef uint8_t BYTE; int main(void) { FILE* f = fopen

我是C的新手。我偶然发现了一些我无法解释的
feof的行为。特别是在下面的代码中,我创建了一个文件,在其中写入一个字节的信息,然后关闭并再次打开它,读取信息(我的1个字节),直到达到
EOF
,然后将文件指针的当前位置移动
0
字节(即根本不更改当前位置)突然间,我不再处于
EOF
。为什么

#include <stdio.h>
#include <stdint.h>
typedef uint8_t BYTE;

int main(void) {
    FILE* f = fopen("myfile.txt","w");
    BYTE b = 0x0000;
    fwrite(&b,1,1,f);
    fclose(f);
    f = fopen("myfile.txt","r");
    while (!feof(f)){
        fread(&b,1,1,f);
    }
    printf("We have reached EOF: %i \n",feof(f));
    fseek(f,0,SEEK_CUR);
    printf("We have reached EOF: %i \n",feof(f));
} 
从文档中:

成功调用此函数后,流的文件结束内部指示符将被清除,先前调用此流上的ungetc产生的所有影响将被删除

从文档中:

成功调用此函数后,流的文件结束内部指示符将被清除,先前调用此流上的ungetc产生的所有影响将被删除


@你提到的这个问题似乎在谈论我的问题,但是那里的讨论/回答对我来说太高级了。嗯,伙计们?你不是在(!feof())
的时候用这个
跳过枪吗?这在这里是非常合适的…@Quentin:问题确实不同,feof()可以在这里使用。但在我看来,这要么是一种过于复杂的方式,要么是一种学习练习,在这种情况下,其他答案可能会有所帮助。@wildplasser你提到的问题似乎在谈论我的问题,但那里的讨论/答案对我来说太高级了。嗯,伙计们?你不是在(!feof())
的时候用这个
跳过枪吗?这在这里是非常合适的…@Quentin:问题确实不同,feof()可以在这里使用。但在我看来,这要么是一种过于复杂的方式,要么是一种学习练习,在这种情况下,其他答案可能会有所帮助。你不知道fseek这种非直觉行为的动机是什么吗?不,但这听起来是个很好的问题。你不知道fseek这种非直觉行为的动机是什么吗?不,但这听起来是个很好的问题。
We have reached EOF: 1 
We have reached EOF: 0