文件中,保存着每个顶点的X,Y和Z坐标,中间用空格隔开,每个顶点占一行,部分数据存放如下示:
-1.788707e+002 3.188386e+002 1.374012e+002 //第一点(此为本人注,文件中只有前面数据)
-1.405130e+002 3.088977e+002 1.834182e+002 //第二点
... //...
-2.985877e+001 3.088977e+002 2.291170e+002 //第N点
现在我要将以上文件的数据全部读入并存储至动态数组:m_selPt中,其中此动态数组所属的类有X,Y和Z三个成员变量.我的程序初步规划如下:
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrTitle="打开测点";
fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0
All Files(*.*)\0*.*\0\0";
if(IDOK==fileDlg.DoModal())
{
FILE* file;
int i=0;
if((file = fopen(fileDlg.GetFileName(),"r")) == NULL)
return FALSE; CSelPt* spt = NULL;
char str[80];
while(fscanf(file,"%s",str)==1)
{
spt = new CSelPt();
fscanf(file,"%e %e %e",&(m_SelPtList[i]->x),
&(m_SelPtList[i]->y),&(m_SelPtList[i]->z));
AddSelPt.Add(spt);//将此点加入动态数组中
i++;
}
}
运行时,执行打开操作时前若没有重新选择一个点至m_SelPtList中就会出错,即m_SelPtList为空时会出错误.即使先选择一个点至m_SelPtList中,其最终结果也不对,即打开会读入的数据不是原文件中准备读入的数据.请教:我用fscanf处理原文件中换行的问题可对?程序错误?谢谢回复!
-1.788707e+002 3.188386e+002 1.374012e+002 //第一点(此为本人注,文件中只有前面数据)
-1.405130e+002 3.088977e+002 1.834182e+002 //第二点
... //...
-2.985877e+001 3.088977e+002 2.291170e+002 //第N点
现在我要将以上文件的数据全部读入并存储至动态数组:m_selPt中,其中此动态数组所属的类有X,Y和Z三个成员变量.我的程序初步规划如下:
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrTitle="打开测点";
fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0
All Files(*.*)\0*.*\0\0";
if(IDOK==fileDlg.DoModal())
{
FILE* file;
int i=0;
if((file = fopen(fileDlg.GetFileName(),"r")) == NULL)
return FALSE; CSelPt* spt = NULL;
char str[80];
while(fscanf(file,"%s",str)==1)
{
spt = new CSelPt();
fscanf(file,"%e %e %e",&(m_SelPtList[i]->x),
&(m_SelPtList[i]->y),&(m_SelPtList[i]->z));
AddSelPt.Add(spt);//将此点加入动态数组中
i++;
}
}
运行时,执行打开操作时前若没有重新选择一个点至m_SelPtList中就会出错,即m_SelPtList为空时会出错误.即使先选择一个点至m_SelPtList中,其最终结果也不对,即打开会读入的数据不是原文件中准备读入的数据.请教:我用fscanf处理原文件中换行的问题可对?程序错误?谢谢回复!
解决方案 »
- 关于控件数据计算累加的问题
- mfc中listview怎样取得列的顺序?当拖动列标题栏交换列的顺序时触发什么事件?
- 看MFC源代码的一个问题,高手请进!!!
- 哪位有解f = a*x*x+b*y*y+c*x*y+d*x+e*y+g的代码啊???
- vc6编译出现的问题 刚装上的
- 初学者,串行化问题,谢谢帮忙
- 急:对话框中如何设置文件选择控制?
- vc工程中怎么添加层次结构文件?
- socket文件传输 服务器接收到的文件总是不超过24k 大家帮我看看代码
- 关于ActiveX多线程之间的同步问题
- 请问如果我把一个1M的文件中间的某些内容从2个字节变成3个字节,是否可以在原来的文件上直接修改?
- 问个初级问题!!
&(m_SelPtList[i]->y),&(m_SelPtList[i]->z));改为:
fscanf(file,"%e %e %e",&(spt->x),
&(spt->y),&(spt->z));
不知道你的CSelPt如何实现的;好像还有其它问题呦
fscanf(file,"%s",str);读到是什么?
fscanf(file,"%e %e %e",&(spt->x),
&(spt->y),&(spt->z));想读到什么?
我是想将文件上的数据(一行为一个点,一个点又有X,Y和Z三个坐标)读入到我这个动态数组m_SelPtList中.
很正确,我将spt错写成m_SelPtList[i]了.
因为原文件中的数据是一行一行地保存顶点坐标的,我想用fscanf将文件中的数据读入到*spt中.第一个fscanf我是想用来判断换行信息的,不过好像这个不行:<
有无好介绍呢?谢谢!
fscanf(file,"%e %e %e",&(spt->x),
&(spt->y),&(spt->z));就可以了, 可以检验它的返回值, 一旦读到的数据个数不是3, 就说明出错了, 或读完成了.
if(fscanf(file,"%e %e %e ",&(spt->x),&(spt->y),&(spt->z))==3)
{
spt = new CSelPt();
m_SelPtList.Add(spt);//将此点加入到动态数组中去
}
但不加此判断又只能读入一个点:<,
而且读入的点是错误的:<crumpy()兄,再帮帮忙哦:)
{
...
if(fscanf(file,"%e %e %e ",&(spt->x),&(spt->y),&(spt->z))==3)
{
spt = new CSelPt();
m_SelPtList.Add(spt);//将此点加入到动态数组中去
}
else break;...
}这样只能读到一个点?
if(fscanf(file,"%e %e %e ",&(spt->x),&(spt->y),&(spt->z))==3);//这一句还是运行不了.单步调试时错误如下:
Unhandled exception in Enhanced STLViewer.exe(MSVCRTD.DLL):0xC0000005:Access Violation.
运行时弹出一个"遇到问题需要关闭"的错误对话框......:<
while(!feof(file))
{
spt = new CSelPt();
fscanf(file,"%le %le %le",&(spt->x),&(spt->y),&(spt->z));
m_SelPtList.Add(spt);//将此点加入到动态数组中去
}
这样可以将文件中的全部顶点读入,但是有一个问题好奇怪:第一个顶点的X坐标,即第一个数据缺失了第一个字符,比如原文件是"-6.957470e-001"的,读入变成了"6.957470e-001"了.
还有一个问题是会加多一个错误的点(其值等于之前所述那个错误点)...
CFileDialog fileDlg(TRUE);
fileDlg.m_ofn.lpstrTitle="打开测点文件";
fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0"; if(IDOK==fileDlg.DoModal())
{
FILE* file;
if((file = fopen(fileDlg.GetFileName(),"r")) == NULL)
{
AfxMessageBox("打开测点文件失败!");
return ;
} CSelPt* spt = NULL;
while(!feof(file))
{
spt = new CSelPt();
if(fscanf(file,"%le %le %le ",&(spt->x),&(spt->y),&(spt->z)))//加了这个条件
{m_SelPtList.Add(spt);//将此点加入到动态数组中去}
else
{delete spt;return;}
}
fclose(file);
}
再次对crumpy()表示感谢!^_^