开发者社区 问答 正文

关于fseek,fscanf,fprintf的问题

FILE * fp;int i,n;
if((fp=fopen("tmp","w+"))==NULL)
{
return;
}
for(i=1;i<=10;i++)
{
fprintf(fp,"%3d",i);//fprintf(fp,"%d",i);
}
//写入 1 2 3 4 5 6 7 8 9 10
for(i=0;i<10;i++)
{
fseek(fp,i*3L,SEEK_SET);//fseek(fp,i*1L,SEEK_SET);
fscanf(fp,"%d",&n);
printf("%3d",n);
}
printf("\n");
fclose(fp);

当把代码换成注释部分的时候,屏幕显示的数有问题,这是为什么。

展开
收起
a123456678 2016-03-23 10:20:54 2272 分享 版权
1 条回答
写回答
取消 提交回答
  • 其实你现在这样的写法也是有问题的。只不过因为你只写了个位数所以不觉得。
    如果你在输出的时候写成%3d的话,那么tmp文件里的内容是 1 2 3 4 5 6 7 8 9 10,每个数之间有空格,所以读的时候不会出错,
    如果你在输出的时候写成%d的话,那么tmp文件里的内容是12345678910,中间没有空格
    然后你再去读的时候,i=0的时候会读到12345678910;显然这个数都超出了int的范围,所以会报错
    你现在的程序,写一个3位数进去。读出来的时候一样会有问题

    2019-07-17 19:10:25
    赞同 展开评论
问答地址: