C 为什么不是';是否允许我的程序切换模式?

C 为什么不是';是否允许我的程序切换模式?,c,windows,gcc,visual-studio-code,mingw,C,Windows,Gcc,Visual Studio Code,Mingw,我有以下C应用程序: #include <stdio.h> int main() { // Create a file. FILE *filePointer = fopen("deleteme.txt", "w+"); if (filePointer == NULL) { printf("Operation failed.\n"); return 0; }

我有以下C应用程序:

#include <stdio.h>
int main() {
    // Create a file.
    FILE *filePointer = fopen("deleteme.txt", "w+");
    if (filePointer == NULL) {
        printf("Operation failed.\n");
        return 0;
    }
    // Write "Test" to the file.
    if (fputs("Test", filePointer) == EOF) {
        printf("Operation failed.\n");
        return 0;
    }
    // Seek to the beginning.
    if (fseek(filePointer, 0, SEEK_SET) != 0) {
        printf("Operation failed.\n");
        return 0;
    }
    // Read the character "T".
    if (fgetc(filePointer) == EOF) {
        printf("Operation failed.\n");
        return 0;
    }
    // Flush streams.
    fflush(filePointer);
    // Write "esting" to the file.
    if (fputs("esting", filePointer) == EOF) { // <--- Fails here.
        printf("Operation failed.\n");
        return 0;
    }
    printf("Operation succeeded.\n");
    return 0;
}
#包括
int main(){
//创建一个文件。
FILE*filePointer=fopen(“deleteme.txt”、“w+”);
if(filePointer==NULL){
printf(“操作失败。\n”);
返回0;
}
//将“测试”写入文件。
if(fputs(“Test”,filePointer)=EOF){
printf(“操作失败。\n”);
返回0;
}
//从头开始。
if(fseek(文件指针,0,搜索集)!=0){
printf(“操作失败。\n”);
返回0;
}
//读“T”字。
if(fgetc(文件指针)=EOF){
printf(“操作失败。\n”);
返回0;
}
//冲洗溪流。
fflush(filePointer);
//将“测试”写入文件。

if(fputs(“测试”,文件指针)=EOF){//
fflush
应该只在读后再读时才需要,而不像这里读后再写。但是这里的实际问题可能与以下事实有关:
fgetc
将文件指针移动超过1个字节,调用
ftell
之后给我4。@ssbssa对我来说,
ftell
返回一个v调用
fgetc
1
的值。这是意料之中的,因为
char
在我的环境中是1字节。看起来您在
fflush
之后调用了
ftell
,这似乎将流位置提前到了末尾,在这种情况下它确实返回
4
。是的,我在Windows上。你说得对,在
fgetc
它返回1,但在
fflush
之后它返回4,这很奇怪。@ssbssa是的,而且……由于我们处于写入和更新模式
w+
,我希望
fflush
将允许我们从读取切换到写入,如文档所述。在更新模式下,您的第一次读取或写入操作将使您n该模式,然后您需要切换模式才能允许相反的操作。
fseek
确实按照文档中的说明工作,但我想知道为什么
fflush
不工作。我想我现在找到了相关文档,请参阅:
但是,当您从读取切换到写入时,输入操作必须遇到错误n EOF标记。如果没有EOF,则必须使用对文件定位函数的中间调用。