首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

看一下这段代码,帮忙改进一下,该怎么解决

2012-03-23 
看一下这段代码,帮忙改进一下voidCGUITestDlg::OnLoaddata(){CStringsFileNameCStringsFileFilter *.tx

看一下这段代码,帮忙改进一下
void   CGUITestDlg::OnLoaddata()  
{

CString   sFileName;
CString   sFileFilter= "*.txt|*.txt ";
CFileDialog   fDlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,sFileFilter,NULL);
fDlg.DoModal();
sFileName=fDlg.GetFileName();
        if(sFileName!= " ")
{
    CFile   file(sFileName,CFile::modeRead);
    int     nFileLength=file.GetLength();
    char   *buffer;
    double   sum=0;
    int   count=0;
    HGLOBAL   hgl=::GlobalAlloc(GMEM_MOVEABLE,nFileLength);  
    buffer=(char   *)::GlobalLock(hgl);
    file.Read(buffer,nFileLength);
    SetDlgItemText(IDC_STATIC,   buffer);
        for(int   j=0,i=0;i <nFileLength;i++)
{
          if(*(buffer)== '   ')
{
          data[j++]   =   atof(buffer);
                count++;
}
          buffer++;
}
m=count;
          m_dotnumber=count/2;
        n=count/2;
   
    ::GlobalUnlock(hgl);
    ::GlobalFree(hgl);
    file.Close();
}  

我是想把保存在txt文档里面的数据读成double型的数组,虽然现在这个程序可以完成,但是要求txt文档里面的数据必须保存成:以空格开头,每个数据以单个空格格开,中间不能有其他字符,如换行之类的,格式,否则就出错,请帮忙看看。
    新手,分数不多,请大家原谅。谢谢!

[解决办法]
“开头必须是空格”是你自己规定的,在语句if(*(buffer)== ' ')中,你可以想法改改这个条件语句。
此外,中间不能有其他字符是因为你没有对其他字符进行判断,所以调用函数atof(buffer);时会出现错误,对atof来说,回车符或者其他符号是非法的。可以这样修改

for(int j=0,i=0;i <nFileLength;i++)
{
if(*(buffer)== '\n '||*(buffer)== '\t ')
{
buffer++;
continue;
}
if(*(buffer)== ' ')
{
data[j++] = atof(buffer);
count++;
}
buffer++;
}

热点排行