如何用c语言在文件中进行基本IO?

如何用c语言在文件中进行基本IO?,c,io,fopen,C,Io,Fopen,不知道它是否重复,如果是,请标记它(我在任何地方都找不到答案) 具有以下特征: #include <stdio.h> #include <stdlib.h> int main (void) { FILE *fp = fopen("txt2", "r+"); // does not help a+ or w+ fprintf(fp,"20"); fseek(fp,1,SEEK_CUR); fprintf(fp,"19"); fo

不知道它是否重复,如果是,请标记它(我在任何地方都找不到答案)

具有以下特征:

#include <stdio.h>
#include <stdlib.h>

int main (void) {

    FILE *fp = fopen("txt2", "r+"); // does not help a+ or w+
    fprintf(fp,"20");
    fseek(fp,1,SEEK_CUR);
    fprintf(fp,"19");

    for(char c;(c=getc(fp))!=EOF;)
        putchar(c);

    fclose(fp);
    return 0;
}
但是,输出是
2019
,而不是
20 19
。那么这是否意味着
fseek
修剪空白?或者为什么欲望不是输出


您需要添加对
fflush()
fseek()的调用。。。在阅读和写作之间

当以更新模式打开文件时(“+”作为上述模式参数值列表中的第二个或第三个字符),可以对关联流执行输入和输出。但是,如果没有对fflush函数或文件定位函数(fseek、fsetpos或rewind)的中间调用,则输出后不得直接跟随输入,如果没有对文件定位函数的中间调用,则输入后不得直接跟随输出,除非输入操作遇到文件结束。在某些实现中,使用更新模式打开(或创建)文本文件可能会打开(或创建)二进制流


c
必须是
int
为什么?没有字符->整数转换?无论如何,仍然无法获得输出,因为
char
无法处理
EOF
阅读文档。它解释了getc返回的内容;fseek(fp,1,SEEK_SET);fprintf(fp,“19”)-(让它成为注释),我仍然可以在for循环中使用
char
,它可以工作。因此,您的陈述对我的情况不正确(或者编译器正在为我进行char->int转换)
getc
想要一个
int
您还可以详细说明解释
fopen
模式的第二个问题吗?就像
w+/r+/a+/
和使用其中一种时的区别一样。手册页没有说明它将到达的位置,但我仍然对它感到困惑them@DavidRanieri没错。但是它能工作,也许编译器能帮上忙?@Austics456你需要换芯片:“它能工作”这是错误的推理,遵循标准规则。@pmg,你为什么要把函数
fflush
改成
倒带
?据我所知,两者的不同之处在于,都将文件位置设置在文件的开头。那你为什么这么做?
FILE *fp = fopen("txt2", "w+");
...
fseek(fp,10,SEEK_CUR);
    fprintf(fp,"19");              // write

    rewind(fp);                    // follow rhe rules

    for(int c;(c=getc(fp))!=EOF;)  // read, make sure c is int