看一下这段代码,帮忙改进一下
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++;
}