CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

有关文件读取的问题!

楼主pqxx(深蓝)2002-03-28 09:46:31 在 VC/MFC / 基础类 提问

我用从一个文本文件中读取数据,文件中的数据格式如下:  
  如果是正小数则一共八个字符,如果是负小数加上符号位一共九个字符  
  数据之间无空格回车之类的分隔符,文件也没有头结构,所以我每次  
  先读出头一个字符,存到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

相关问题

  • 有关大文件的读取!
  • 文件读取?
  • 读取文件?
  • 文件读取~
  • 文件读取。。。。。。
  • 文件读取
  • 读取文件
  • 文件读取
  • 谁有关于用VC++读取TIFF文件的源代码??
  • 急!!!求助有关文件读取的问题

关键词

  • 字符
  • 文件
  • 数据
  • code
  • 读取
  • 小数
  • 读出
  • cfile
  • 结果
  • read

得分解答快速导航

  • 帖主:pqxx
  • ydogg
  • hyc1980
  • jyu1221
  • folbaby1230
  • jianfeizhao

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo