作者ckclark (大资佬)
看板b98902HW
标题Re: [问题] 求助强者 "r+" 的奇怪现象
时间Sat Dec 5 01:22:49 2009
※ 引述《barry800414 (小铭)》之铭言:
: 本来我是打算读书会把fopen 的参数都讲一下
: 然实际的看有什麽现象发生
: 不过我今天试了好久
: 发现了奇怪的事情...
: 自己都爆炸了 XD
: #include<stdio.h>
: int main()
: {
: FILE *ptr;
: int data;
: ptr=fopen("in.txt","r+");
: fscanf(ptr,"%d",&data);
: fprintf(ptr,"test");
: fprintf(ptr,"%d\n",data);
: fclose(ptr);
: return 0;
: }
: in.txt的内容
: 第一种是只有123456
: 这六个字元 连换行都没有
: 这个程式可以成功的让in.txt的内容变成
: 123456test123456
: 第二种是123456这六个字元加一个换行
: 奇怪的事情发生了
: 跑完之後in.txt的内容还是123456
: 连"test" 都没办法输出
: 而我看上课的讲义上r+是这麽写:
: Open an existing file for update (reading and writing)
: update的定义到底是什麽?
: 为什麽上面的程式在第二种状况会这样ˊˋ?
: 请诸位强者知道的帮忙一下 感激不尽
: 噢我是用devcpp 跑的 附档名存.c
看起来是\r\n遗毒
在linux上跑起来是很正常的
看起来似乎是fscanf和fprintf算byte上的问题
他们会把\r\n当一个byte
检验一下fprintf的回传值是-1 代表遇到了问题
不是很清楚细节
解决方法就是连後面换行也读掉 用"%d "
--C2009 TA
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.30.44
1F:推 barry800414:感谢助教 12/05 01:28
2F:→ ckclark:这篇乱猜的 忽略它 12/05 02:13