Chinaunix
标题:
有了解C++标准库的吗?
[打印本页]
作者:
我无所谓
时间:
2005-02-15 23:00
标题:
有了解C++标准库的吗?
问题1 : strstream对象可以用getline吗?
我试过getline,有问题,编译器没有报错,可是取到的是空串,可能是有些地方我没做好.
相关代码如下:
//----------------------------------------------------
//Function Name : ReadData
//
//Desc : 从当前位置开始读取数据
//Input : 一个有效的文件流
//Output :
//Notice : 当前文件指针必须有效, 必须指向数据头位置
//----------------------------------------------------
VOID CReadV23EX::ReadData(fstream& file)
{
CHAR FileBuf[LINE_MAX] = {'\0'};
DWORD dwOldPos = 0;
V23EX_DATA *lpData = NULL;
strstream strData( (char *)FileBuf, sizeof(FileBuf) );
strData.setf(ios::skipws | ios::showpos);
this->;DataSize = 0; // LONG DataSize; // 每块数据量
while (!listData.empty()) // list<V23EX_DATA*>; listData; // V23EX_DATA 是自定义的结构,全局
{
lpData = listData.front(); // 释放上一个数据资源
listData.pop_front();
SAFE_DELETE ( lpData ); // 这是自己定义的宏,完成delete和指针置空操作
}
listData.clear();
dwOldPos = file.tellg();
file.getline( FileBuf, sizeof(FileBuf));
FileBuf[strlen( FileBuf ) - 1] = '\0'; // 替换'\r'为'\0'
while( !file.eof() && FileBuf[0] != '\'' )
{
// 记录数据
lpData = new V23EX_DATA;
/*********************** 这里是问题所在 **********************************/
// 比如数据是:
// -106.5,6.02
// -106.2,6.08
// -101.2,6.50
// -96.2,7.06
//
// 对应16进制码为:
// 2D 31 30 36 2E 35 2C 36 2E 30 32 0D 0A
// 2D 31 30 36 2E 32 2C 36 2E 30 38 0D 0A
// 2D 31 30 31 2E 32 2C 36 2E 35 30 0D 0A
// 2D 39 36 2E 32 2C 37 2E 30 36 0D 0A
//
//
// 第一次取数据行, 很正常, lpData->;data_1 = "-106.0", lpData->;data_2 == "6.02"// 第二次取数据行, 就有问题了:
// lpData->;data_1[0] = lpData->;data_2[0] = '\0'
// data_1、data_2 内其余的元素没有动,还是 "106.0" 和 ".02"
strData.getline ( lpData->;data_1, sizeof(lpData->;data_1), ',');
strData.getline ( lpData->;data_2, sizeof(lpData->;data_2), '\n');
/*************************************************************************/
listData.push_front(lpData);
this->;DataSize++;
dwOldPos = file.tellg(); // 记录当前文件指针位置
file.getline( FileBuf, sizeof(FileBuf) );
FileBuf[strlen( FileBuf ) - 1] = '\0'; // 替换'\r'为'\0'
} // end of while
file.seekg( dwOldPos, ios::beg ); // 恢复文件指针位置(退出循环前多读取了一行)
}
复制代码
问题2 :把 12 和 -9 格式化为 +012.0 和 -009.0 ,有相关的函数吗?
另外, 对代码有改进意见的朋友也欢迎指出来, 无论是技术方面还是风格方面, 感谢, 感谢, 严重感谢.
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2