免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1036 | 回复: 0
打印 上一主题 下一主题

[C++] 有了解C++标准库的吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-02-15 23:00 |只看该作者 |倒序浏览
问题1 : strstream对象可以用getline吗?
  我试过getline,有问题,编译器没有报错,可是取到的是空串,可能是有些地方我没做好.
  相关代码如下:
  1. //----------------------------------------------------
  2. //Function Name    : ReadData
  3. //
  4. //Desc            : 从当前位置开始读取数据
  5. //Input            : 一个有效的文件流
  6. //Output        :
  7. //Notice        : 当前文件指针必须有效, 必须指向数据头位置
  8. //----------------------------------------------------
  9. VOID CReadV23EX::ReadData(fstream& file)
  10. {
  11.     CHAR           FileBuf[LINE_MAX]   = {'\0'};
  12.     DWORD       dwOldPos    = 0;
  13.     V23EX_DATA  *lpData     = NULL;

  14.     strstream strData( (char *)FileBuf, sizeof(FileBuf) );
  15.     strData.setf(ios::skipws | ios::showpos);

  16.     this->;DataSize = 0; // LONG DataSize;   // 每块数据量

  17.     while (!listData.empty()) // list<V23EX_DATA*>; listData; // V23EX_DATA 是自定义的结构,全局
  18.     {
  19.         lpData = listData.front();  // 释放上一个数据资源
  20.         listData.pop_front();
  21.         SAFE_DELETE ( lpData );     // 这是自己定义的宏,完成delete和指针置空操作
  22.     }

  23.     listData.clear();

  24.     dwOldPos = file.tellg();
  25.     file.getline( FileBuf, sizeof(FileBuf));
  26.     FileBuf[strlen( FileBuf ) - 1] = '\0';  // 替换'\r'为'\0'

  27.     while( !file.eof() &&  FileBuf[0] != '\'' )
  28.     {
  29.         // 记录数据
  30.         lpData = new V23EX_DATA;

  31. /*********************** 这里是问题所在 **********************************/
  32. // 比如数据是:
  33. //  -106.5,6.02
  34. //  -106.2,6.08
  35. //  -101.2,6.50
  36. //  -96.2,7.06
  37. //
  38. // 对应16进制码为:
  39. //  2D 31 30 36 2E 35 2C 36 2E 30 32 0D 0A
  40. //  2D 31 30 36 2E 32 2C 36 2E 30 38 0D 0A
  41. //  2D 31 30 31 2E 32 2C 36 2E 35 30 0D 0A
  42. //  2D 39 36 2E 32 2C 37 2E 30 36 0D 0A
  43. //
  44. //
  45. // 第一次取数据行, 很正常, lpData->;data_1 = "-106.0", lpData->;data_2 == "6.02"// 第二次取数据行, 就有问题了:
  46. // lpData->;data_1[0] = lpData->;data_2[0] = '\0'
  47. // data_1、data_2 内其余的元素没有动,还是 "106.0" 和 ".02"

  48.         strData.getline ( lpData->;data_1, sizeof(lpData->;data_1), ',');
  49.         strData.getline ( lpData->;data_2, sizeof(lpData->;data_2), '\n');

  50. /*************************************************************************/

  51.         listData.push_front(lpData);

  52.         this->;DataSize++;

  53.         dwOldPos = file.tellg();    // 记录当前文件指针位置
  54.         file.getline( FileBuf, sizeof(FileBuf) );
  55.         FileBuf[strlen( FileBuf ) - 1] = '\0';  // 替换'\r'为'\0'
  56.     } // end of while

  57.     file.seekg( dwOldPos, ios::beg ); // 恢复文件指针位置(退出循环前多读取了一行)
  58. }
复制代码

问题2 :把 12 和 -9 格式化为 +012.0 和 -009.0 ,有相关的函数吗?

另外, 对代码有改进意见的朋友也欢迎指出来, 无论是技术方面还是风格方面, 感谢, 感谢, 严重感谢.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP