作者cliffchang2 (cliffchang2)
看板C_and_CPP
标题[问题] fprintf 资料覆盖
时间Tue Feb 28 16:55:20 2017
开发平台(Platform): (Ex: Win10, Linux, ...)
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
VC++
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
问题(Question):
写了一个阵列想要存到txt档中
但因为阵列内容会随时更新
所以想要在每次输入的同时将前一组数据删除
以达到txt档中的阵列内容为最新的数据结果
请问有这种删除前一个结果的指令吗?
喂入的资料(Input):
预期的正确结果(Expected Output):
错误结果(Wrong Output):
程式码(Code):(请善用置底文网页, 记得排版)
FILE *fout;
fout=fopen("123.txt","wt");
float a[2];
fprintf(fout,"%.1f %.1f\n",a[0],a[1]); //目前的存法为一直换行往下
fclose(fout);
补充说明(Supplement):
曾经试过\r
不过似乎不会覆盖 而是在最前面进行下一个输出
感谢各位协助
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.120.90.230
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1488272123.A.ADC.html
1F:推 a21802: repeat fopen? 02/28 16:59
2F:推 LPH66: \r 是萤幕专用, 写档的话这些控制字元没有用 02/28 17:08
3F:→ LPH66: 最直觉的方式是 rewind(fout) 之後再写入 02/28 17:10
4F:→ LPH66: 不过要小心後来的资料太短没有全部盖掉的话会有残余留下 02/28 17:10
5F:→ LPH66: 不过你已经有 \n 了那就是第一个换行之後的东西都别管就好 02/28 17:11
6F:→ LPH66: 真的要全盖掉的话可以考虑例如每次都多输出固定数量的空白 02/28 17:11
成功了感谢
如果阵列数固定(这里为2)的话应该就不会有残留的问题了吧?
※ 编辑: cliffchang2 (140.120.90.230), 02/28/2017 17:18:11
7F:推 LPH66: 1234.5 1234.5 跟 0.6 0.7 字元数就不一样 02/28 17:20
有发现後来资料短时会残留的问题了
决定手动把换行後的资料删掉即可
再次感谢
※ 编辑: cliffchang2 (140.120.90.230), 02/28/2017 17:25:49
8F:→ laladeer: fseek不可以吗? 02/28 22:16
9F:推 LPH66: 可以啊, 不过既然要盖掉旧资料那 rewind 稍微简洁一点 03/02 14:26
10F:→ LPH66: 你也可以直接写 fseek(fout, 0, SEEK_SET); 意思是一样的 03/02 14:27