C++读文件异常

利用ifstream读文件,发现读出的数据(浮点数)每隔若干个数整数位被置为零了。前13个正常,都是3.0488,-1.81439,0.94929,-0.825004,0... 利用ifstream读文件,发现读出的数据(浮点数)每隔若干个数整数位被置为零了。

前13个正常,都是3.0488 ,-1.81439, 0.94929,-0.825004,0.895662,-0.270324,0.03977,0.667674,0.133245,0.375154,-0.140888,0.07932,-0.281494。

接下来每隔13个数有一个异常。
第14-25个:
写进去的数据是:2.52137,-1.83988,2.16424,-1.0637,0.798679,-0.580831,0.909838,0.797118,0.281998,0.409642,-0.242933,0.930025,-0.515211
读出来的数据是:0.52137,-1.83988,0.16424,-1.0637,0.798679,-0.580831,0.909838,0.797118,0.281998,0.409642,-0.242933,0.930025,-0.515211
以后每隔13个数都有这个现象。

附上读写文件部分代码:

写文件:
ofstream ofs(file_name,ios::out|ios::trunc);
if(!ofs)
return false;
for(i=0;i<VQ_SIZE;i++)
{
for(j=0;j<13;j++)
{
ofs<<R0[i][j];
}
}
ofs.close();

读文件:
//读文件
ifstream ifs(file_name,ios::in);
if(!ifs)
return false;
for(i=0;i<VQ_SIZE;i++)
for(j=0;j<13;j++)
ifs>>R0[i][j];
展开
 我来答
xoaxa
推荐于2016-08-08 · TA获得超过8610个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3485万
展开全部

写文件的时候,每个数据间用白字符(空格、新行符或TAB)隔开,读入该数据文件时只需简单用

in >> dd;即可。

// 写文件:
ofstream ofs(file_name,ios::out|ios::trunc);
if(!ofs) return false;
for(i = 0;i < VQ_SIZE;i++) {
    for(j = 0;j < 13;j++) {
        ofs << R0[i][j] << ' '; // 这儿写了个空格。
    }
}
ofs.close();
 
// 读文件:
ifstream ifs(file_name,ios::in);
if(!ifs) return false;
for(i = 0;i < VQ_SIZE;i++) {
    for(j = 0;j < 13;j++)
        ifs >> R0[i][j];
}
追问
试了下你说的方法,这样做可以。
能解释下为什么吗?
追答
你的原始数据没有使用数据分隔符,也就是说所有数据都是连在一起的,实际上可能一个数据无法正常读入。
银刃JTBDk
2014-07-21 · TA获得超过153个赞
知道答主
回答量:115
采纳率:100%
帮助的人:105万
展开全部
fscanf(f, "%s%s%lf%lf%lf", ID[i], Name[i], &Chinese[i], &Math[i], &English[i]); ^ ^ ^ %lf需要传递的是double*类型的指针
请采纳。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
水溥心0T
2014-07-21 · TA获得超过164个赞
知道小有建树答主
回答量:276
采纳率:100%
帮助的人:161万
展开全部
用C的float都会有这样的问题,这涉及精度,不可能完全一样,要达到你的要求,用string来做
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式