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,能解释下?

你写进文件之后,格式是
123(换行)

读的时候123被当做一个数读进来了,因为之间没有分隔符

想读出1的话,写的时候应该这么写
fprintf(fp,"%d ",a[i]);

fprintf(fp,"%d\t",a[i]);

fprintf(fp,"%d\n",a[i]);
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-08-31
for(i=0;i<3;i++)
fprintf(fp,"%d",a[i]);你这样写进去的 所以文件里存入123紧挨着
fscanf(fp,"%d",&n); 跟scanf差不多 都是在空格或回车后结束 也就是说把123都读进去了
for(i=0;i<3;i++)
fprintf(fp,"%d ",a[i]);改成 在%d后面加空格就好了
第2个回答  2009-08-31
#include <stdio.h>
main()
{ FILE *fp; int a[10]={1,2,3},i,n;
//添加一个字符
char ch;
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);
fscanf(fp,"%c",&ch);
printf("%c",ch);//输出字符‘1’;
fclose(fp);
// printf("%d\n",n);
}
//由于你文件你的字符排列是 123'\n' 所以用%d读入将读入123
//就象这句 scanf("%d",&n);一直读到空格或者回车符为止。那怕你输入A字
//符,printf("%d",n);将输出(int)A=97;
第3个回答  2009-08-31
for(i=0;i<3;i++) fprintf(fp,"%d",a[i]);
1.循环输出三个数正确。。。a[0]a[1]a[2]...123

2.你说输出1??

3.源文件下d1.dat里面也是123.
第4个回答  2009-08-31
123之间没有空格

fprintf(fp,"%d",a[i]); =>fprintf(fp,"%d ",a[i]); 就是1了