[问题] 文字档读值会读两次

楼主: jacky1989   2014-10-23 02:52:31
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC2010
问题(Question):
使用档案指标来读取一个文字档,最后一行为换行符号,会读两次
程式码(Code):(请善用置底文网页, 记得排版)
#include<stdlib.h>
#include<stdio.h>
int main(){
FILE *fp;
double value_tmp;
fp=fopen("C:\\source_data.txt","r");
if(!fp)
exit(0)
while(!feof(fp)){
fscanf(fp,"%lf",&value_tmp); //<-这边有问题
printf("%lf",value_tmp);
}
return 0;
}
假设我原本的文字档内是这样
1.5
2.6
3.6
1.8
2.7
(end of file)
因为设计的关系,所以最后一个值会再空一行
那读值出来就会变成这样
1.5
2.6
3.6
1.8
2.7
2.7 <-会多出现一次
我该如何解决这个问题?总不能每次都去修改文字档,把最后一个换行符号弄掉吧?
先谢谢了
作者: LPH66 (-6.2598534e+18f)   2014-10-23 02:55:00
不要在读取前检查 feof, 因为 feof 是在读取失败"后"才成立简单讲就是“还没看当然不知道后面还有没有”另外这跟档尾的换行没有关系
作者: johnpage (johnpage)   2014-10-23 07:52:00
读取后马上判断
作者: foolstyle   2014-10-23 13:51:00
想借这篇请问一下@@C++是否有办法可以一次取得档案内所有内容(含有空白)呢
作者: johnpage (johnpage)   2014-10-23 14:02:00
内存会吃很多,应该不会这样设计
作者: Feis (永远睡不着 @@)   2014-10-23 18:24:00
作者: EdisonX (卡卡兽)   2014-10-23 19:12:00
读取所有内容可直接用fread,但通常会设一个上限,如8mb,做分段读取。若分段的话有时难处理。

Links booklink

Contact Us: admin [ a t ] ucptt.com