作者Uihc (我 有我的倔强...)
看板Programming
标题[C++] 浮点数写入档案出现奇怪的数字
时间Mon Nov 19 13:55:29 2007
求助版上的前辈们~~~
我有一个文字档,一行有8个指数浮点数,整个档案有很多行这样的数字,而且每一行
的前方有10个空格。
5.868966e+001 7.524138e+001 9.889655e+001 4.682759e+001 8.820690e+001
1.214828e+002 1.634138e+002 8.200000e+001
(注:因BBS排版所以跨行了,在档案中是同一行)
我要做的是把从 1.txt 读进来後,转成一般浮点数格式後,再写到 2.txt 去
而且要变成如以下的排列方式
58.6897
75.2414
98.8966
46.8276
88.2069
12.1483
16.3414
82.0000
我的困扰就是,虽然看似指数浮点数有转成一般浮点数格式,但是写入到档案时却变成
58.68978.689668.68966e+0066896608966096606606001111
75.24145.241385.24138e+0062413804138013803808001111
98.89668.896558.89655e+0068965509655065505505001111
46.82766.827596.82759e+0068275902759075905909001111
88.20698.20698.2069e+00620690069006900900001111
121.48321.48282.14828e+0071.4828e+00648280082800280080002222
163.41463.41386.34138e+0073.4138e+00641380013800380080002222
8222e+0060000001111
请问我是什麽地方做错了呢?? 谢谢
==============================程式码片断如下:================================
char buffer[256];
//用来暂放从档案里读进来的资料
float f;
ifstream fin("1.txt");
ofstream fout("2.txt");
fin.getline(buffer,256,'\n');
//因每一行固定有10个空格,所以我直接从第11个位置开始处理
for(int pos=11;pos<=24;pos++)
{
//这是为了让下一个数字被输出到下一行的判断1,
//如果有值而且不是空白就输出到目前的档案位置
if((buffer[pos]) && (buffer[pos]!=' '))
{
f=atof(&buffer[pos]);
fout<<f;
//这是为了让下一个数字被输出到下一行的判断2,
//如果阵列下一个值是空白就输出换行符号
if(buffer[pos+1]==' ')
fout<<endl;
}
}
for(int pos=25;pos<=255;pos++)
{
//这是为了让下一个数字被输出到下一行的判断3,
//如果有值而且不是空白就输出到目前的档案位置
if((buffer[pos]) && (buffer[pos]!=' '))
{
f=atof(&buffer[pos]);
fout<<f;
//这是为了让下一个数字被输出到下一行的判断4,
//如果阵列下一个值是空白或阵列结尾符号就输出换行符号
if(buffer[pos+1]==' ' || buffer[pos+1]=='\0')
fout<<endl;
}
}
fin.close();
fout.close();
※ 编辑: Uihc 来自: 140.112.64.235 (11/19 13:38)
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.64.235
※ 编辑: Uihc 来自: 140.112.64.235 (11/19 13:55)