下面程序段的输出结果是(3.141500,12141500)。 求每一步解释

下面程序段的输出结果是(3.141500,12141500)。
求每一步解释


    FILE *fp;
    double x=3.1415;
    int y=12;
    fp=fopen("test.txt","w");
    fprintf(fp,"%f",x);
    rewind(fp);
    fprintf(fp,"%d",y);
    fclose(fp);
    fp=fopen("test.txt","r");
    fscanf(fp,"%d",&y);
    printf("%f,%d",x,y);
    fclose(fp);
  1. 打开一个名为 "test.txt" 的文件,并将一个 double 类型变量 x 的值写入文件中:
    FILE *fp;
    double x=3.1415;
    int y=12;
    fp=fopen("test.txt","w");
    fprintf(fp,"%f",x);
    
  2. 使用 rewind 函数将文件指针重置到文件开头位置:
    rewind(fp);
    
  3. 将一个 int 类型变量 y 的值写入文件中,此时将覆盖掉之前写入的 double 类型变量 x 的值:
    fprintf(fp,"%d",y);
    
  4. 关闭文件:
    fclose(fp);
    
  5. 再次打开文件,从文件中读取一个 int 类型变量 y 的值:
    fp=fopen("test.txt","r");
    fscanf(fp,"%d",&y);
    
  6. 使用 printf 函数输出变量 x 和 y 的值:
    printf("%f,%d",x,y);
    

由于在第 3 步中将 double 类型变量 x 的值覆盖掉了,所以输出结果中 x 的值为 3.141500 而不是 3.1415。而 y 的值则是在第 2 步中写入的 12,而在第 3 步中被覆盖成了第 3 步中写入的 12141500。