有关文件读取的问题!
我用从一个文本文件中读取数据,文件中的数据格式如下:
如果是正小数则一共八个字符,如果是负小数加上符号位一共九个字符
数据之间无空格回车之类的分隔符,文件也没有头结构,所以我每次
先读出头一个字符,存到m_code中,并判断是不是等于“-”如果是的话就再读出八个字符
如果不是就再读出七个字符,并存到m_read中,最后将m_code和m_read相加
(m_codem_read是CString型),就得出结果,想着没什么问题,可结果一直不对,不知错在那里
代码如下:
char code[1]//读取符号
char temp8[8];//如果是负小数再读取八个字符
char temp7[7];//如果是正小数再读取七个字符
char temp9[9]; //
CString m_read,m_code;
/////////////////////把中间过程的运算结果从文本文件中读出
CFile datfile("dat.txt",CFile::modeRead
| CFile::shareDenyWrite);
for(int j=0;j<J;j++)
{
datfile.Read(code,1);
m_code=code;
if(m_code==“-”)
{
dat.Read(temp8,8);
m_code=code;
m_read=temp8;
m_read=code+m_read;
}
else
{
dat.Read(temp7,7);
m_code=code;
m_read=temp7;
m_read=m_code+m_read;
}
strcpy(temp9,m_read.GetBuffer(m_read.GetLength()));
//按CString中的字节长度读取到temp9
dat[j]=atof(temp9);//double 型
}
datfile.Close();
问题点数:100、回复次数:9Top
1 楼ydogg(灰毛兔频频)回复于 2002-03-28 09:58:13 得分 10
这样读取有一个风险,最好打开文件后就 SeekToBegin(),否则如果初始文件指针有问题的话,可能的不到正确结果。
请详细说明结果和想象中有何不同。
double
atodTop
2 楼ydogg(灰毛兔频频)回复于 2002-03-28 10:00:04 得分 0
datflie == dat ??Top
3 楼hyc1980(???)回复于 2002-03-28 10:22:52 得分 10
你可以直接取出来判断第一位是否为"-",这样操做不是简单一点吗?再用转换函数把字符串转换Top
4 楼jyu1221(天同)回复于 2002-03-28 10:24:08 得分 20
定义可能有问题,应该改为:
char code[1+1]//读取符号
char temp8[8 +1];//如果是负小数再读取八个字符
char temp7[7+1];//如果是正小数再读取七个字符
char temp9[9+1]; //
Top
5 楼pqxx(深蓝)回复于 2002-03-28 11:41:41 得分 0
文件中的数据为-0.0572650.9307951.8033851.5758991等等
想象中code应该读取一个字符,在调试窗口中code也是{45‘-’,传到
m_code中也是{45‘-’,但是一判断if(m_code==“-”)总是false
总是跳到else块儿
在m_read=m_code+m_read;用鼠标停留得到其值为“-烫烫烫烫烫.5726
烫烫烫烫烫
用strcpy得到的temp9也是“-烫烫烫烫烫.5726烫烫烫烫烫
再用dat[j]=atof(temp9);转换为double 型dat[j]就为0.00000了
Top
6 楼folbaby1230(knight)回复于 2002-03-29 08:49:08 得分 30
用=='-'判断,
而不用=="-";
字符长度加一.Top
7 楼cnshinhwa(月夜森林)回复于 2002-03-29 09:35:36 得分 0
关注一下Top
8 楼jianfeizhao()回复于 2002-03-29 09:55:50 得分 30
如果读取的是一个正数,则只有8位,temp9[9]的最后一个字节是一个随机数,所以读出的数据是错误的。
应该在每一个for()的开始将temp7[7],temp8[8],temp9[9]赋值成0Top
9 楼win_book()回复于 2002-03-29 10:43:44 得分 0
jyu1221(天同) 正确Top




