C语言文件fscanf和fprintf

有以下程序
#include <stdio.h>
main()
{ FILE *fp; int a[10]={1,2,3},i,n;
fp=fopen("d1.dat","w");
for(i=0;i<3;i++) fprintf(fp,"%d",a[i]);
fprintf(fp,"\n");
fclose(fp);
fp=fopen("d1.dat","r");
fscanf(fp,"%d",&n);
fclose(fp);
printf("%d\n",n);
}
程序的运行结果是
为什么是123,不是1,能解释下?

第1个回答  推荐于2016-05-17
fprintf函数:
头文件:#include <stdio.h>
定义函数:int fprintf(FILE * stream, const char * format, ...);
函数说明:fprintf()会根据参数format 字符串来转换并格式化数据, 然后将结果输出到参数stream 指定的文件中, 直到出现字符串结束('\0')为止。
返回值:关于参数format 字符串的格式请参考printf(). 成功则返回实际输出的字符数, 失败则返回-1, 错误原因存于errno 中.
范例
#include <stdio.h>
main()
{
int i = 150;
int j = -100;
double k = 3.14159;
fprintf(stdout, "%d %f %x \n", j, k, i);
fprintf(stdout, "%2d %*d\n", i, 2, i);
}
执行:
-100 3.141590 96
150 150
fscanf函数:
功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。

用 法:int fscanf(FILE *stream, char *format,[argument...]);
int fscanf(文件指针,格式字符串,输入列表);
  for example:
  FILE*fp;
  chara[10];
  intb;
  doublec;
  fscanf(fp,"%s%d%lf",a,&b,&c)
  返回值:整型,数值等于[argument...]的个数
其中的format就是相当于正则表达式中的格式,即用什么样的格式来分隔文件中的信息。