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]; 展开
前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]; 展开
3个回答
展开全部
写文件的时候,每个数据间用白字符(空格、新行符或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];
}
追问
试了下你说的方法,这样做可以。
能解释下为什么吗?
追答
你的原始数据没有使用数据分隔符,也就是说所有数据都是连在一起的,实际上可能一个数据无法正常读入。
展开全部
fscanf(f, "%s%s%lf%lf%lf", ID[i], Name[i], &Chinese[i], &Math[i], &English[i]); ^ ^ ^ %lf需要传递的是double*类型的指针
请采纳。
请采纳。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用C的float都会有这样的问题,这涉及精度,不可能完全一样,要达到你的要求,用string来做
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询