C语言文件题

这题为什么答案是1230不应该是12么... 这题为什么答案是123 0不应该是1 2么 展开
 我来答
拥抱Linux
2019-03-14 · 知道合伙人教育行家
拥抱Linux
知道合伙人教育行家
采纳数:418 获赞数:2160
大学的校级奖学金,机械行业十年工作经验

向TA提问 私信TA
展开全部

原因:

fscanf(fp,"%d%d",&k,&n);

这句语句造成的。

事实上,无论是 scanf() 函数 还是 fscanf() 函数, 在获取数据的时候,都是严格按照双引号里面的格式来获取数据和分隔数据的。

对于上面这句语句里的格式,输入的时候一般都是在两个值之间加上空格来避免 scanf() 把数据搞混的。

所以,上面的整个程序代码里,先前通过

        fprintf(fp,"%d",i);

输入数据到文件的时候,数字1、2、3实际上是紧紧挨在一起的,也就是说,d1.dat 文件的数据是下面这样的:

123

所以,当后面的

fscanf(fp,"%d%d",&k,&n);

从文件中读取数据的时候,是把 123 当作一个int型的值的整体来读入并交给变量 k 的,而把文件里的 123 读取完之后,文件就结束了,所以就没有、也无法给变量 n 赋值,所以变量 n 就保持了初始值 0。

然后,printf()输出,就是 123 0 了。

延伸:

保持上面程序代码中的 fscanf() 语句不变,而要从文件中读取到数据 1、2 分别赋值给变量 k、n 的话,可以简单地在前面的 fprintf() 函数里加一个空格,

       fprintf(fp,"%d",i);
//       这句,在%d后面增加一个空格就可以了
       fprintf(fp,"%d ",i);

如有帮助,烦请点采纳,谢谢!

更多追问追答
追问

想问一下为什么这个改成fprintf"3d"就输出的是12了呢
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式