谢谢大家!请您帮帮忙!
void COldData::ReadOldConcent()
{
float minVolt = 100.0;
float maxVolt = 0.0;
float concent=0.0;
SYSTEMTIME sys;
CString timeH="",timeM="",timeS="";
sys.wYear = sys.wMonth = sys.wDay= 0;
m_MonthCalendar.GetCurSel(&sys);
CString fileConPath;
fileConPath.Format("%s\\%04d%02d%02d浓度.txt",g_samplePara.ConcentSavePath,sys.wYear,sys.wMonth,sys.wDay);
FILE *fp;
int point=0;
CFileFind finder;
if(!finder.FindFile(fileConPath))
{
MessageBox("您所选择的浓度数据不存在!\r\n 请检查!","打开错误",MB_OK|MB_ICONSTOP);
}
else
{
if(fp=fopen(fileConPath,"rt"))
{
while(!feof(fp))
{
fscanf(fp,"%02d:%02d:%02d %.5f\n",&timeH,&timeM,&timeS,&concent);
m_ConcentValue[point] = concent;
m_time[point].Format("%d:%d:%d",timeH,timeM,timeS);
point++;
}
m_points_Concent = point;
fclose(fp);
}
else
{
MessageBox("未成功打开文件,请重新选择!","打开错误",MB_OK|MB_ICONSTOP);
}
if(m_points_Concent>0)
{
minVolt = 100.0;
maxVolt =0;
for(int j=0;j<m_points_Concent;j++)
{
if(m_ConcentValue[j]>maxVolt)
maxVolt = m_ConcentValue[j];
if(m_ConcentValue[j]<minVolt)
minVolt = m_ConcentValue[j];
}
}
else
{
MessageBox("数据内容为空!","打开错误",MB_OK|MB_ICONSTOP);
}
minVolt = (float)((int)((minVolt-0.99)*10)/5*5/10);
maxVolt = (float)((int)((maxVolt+0.99)*10)/5*5/10);
m_voltStep = (float)((maxVolt-minVolt)/m_voltNum_Signal);
if(m_voltStep<0.005)
m_voltStep=0.005f;
else
m_voltStep=m_voltStep;
}
}
void COldData::ReadOldConcent()
{
float minVolt = 100.0;
float maxVolt = 0.0;
float concent=0.0;
SYSTEMTIME sys;
CString timeH="",timeM="",timeS="";
sys.wYear = sys.wMonth = sys.wDay= 0;
m_MonthCalendar.GetCurSel(&sys);
CString fileConPath;
fileConPath.Format("%s\\%04d%02d%02d浓度.txt",g_samplePara.ConcentSavePath,sys.wYear,sys.wMonth,sys.wDay);
FILE *fp;
int point=0;
CFileFind finder;
if(!finder.FindFile(fileConPath))
{
MessageBox("您所选择的浓度数据不存在!\r\n 请检查!","打开错误",MB_OK|MB_ICONSTOP);
}
else
{
if(fp=fopen(fileConPath,"rt"))
{
while(!feof(fp))
{
fscanf(fp,"%02d:%02d:%02d %.5f\n",&timeH,&timeM,&timeS,&concent);
m_ConcentValue[point] = concent;
m_time[point].Format("%d:%d:%d",timeH,timeM,timeS);
point++;
}
m_points_Concent = point;
fclose(fp);
}
else
{
MessageBox("未成功打开文件,请重新选择!","打开错误",MB_OK|MB_ICONSTOP);
}
if(m_points_Concent>0)
{
minVolt = 100.0;
maxVolt =0;
for(int j=0;j<m_points_Concent;j++)
{
if(m_ConcentValue[j]>maxVolt)
maxVolt = m_ConcentValue[j];
if(m_ConcentValue[j]<minVolt)
minVolt = m_ConcentValue[j];
}
}
else
{
MessageBox("数据内容为空!","打开错误",MB_OK|MB_ICONSTOP);
}
minVolt = (float)((int)((minVolt-0.99)*10)/5*5/10);
maxVolt = (float)((int)((maxVolt+0.99)*10)/5*5/10);
m_voltStep = (float)((maxVolt-minVolt)/m_voltNum_Signal);
if(m_voltStep<0.005)
m_voltStep=0.005f;
else
m_voltStep=m_voltStep;
}
}
点击 ! 运行 就会提示“.exe文件遇到问题,需要关闭”,我单步运行到最后 m_voltStep=m_voltStep; 就会出现如题的错误。
经过/* */ 注释调试,只要 有存在
while(!feof(fp))
{
fscanf(fp,"%02d:%02d:%02d %.5f\n",&timeH,&timeM,&timeS,&concent);
m_ConcentValue[point] = concent;
m_time[point].Format("%d:%d:%d",timeH,timeM,timeS);
point++;
}
运行就会出现如题的错误。
文件中的格式是否对应一致
我是直接从写入格式的地方复制过去的
我用MessageBox();调试可以独到数据的
定义int类型,是不是有益处呢,改成long试试。在下初学,愚见。
fscanf(fp,"%02d:%02d:%02d %.5f\n",&timeH,&timeM,&timeS,&concent);兄弟,你这个是CString不是int。
Mackz 兄弟;我用MessageBox(m_time[5].);调试其中的第五个元素是可以输出的。那就应该不是这个问题了。
直到程序的最后,我还是用MessageBox 测试输出值,还是可以输出正确的 minVolt, maxVolt ,m_voltStep的。
minVolt = (float)((int)((minVolt-0.99)*10)/5*5/10);
maxVolt = (float)((int)((maxVolt+0.99)*10)/5*5/10);
m_voltStep = (float)((maxVolt-minVolt)/m_voltNum_Signal);
if(m_voltStep <0.005)
m_voltStep=0.005f;
else
m_voltStep=m_voltStep;
还是能运行到的,只要运行完了最后提示".exe遇到问题,关闭"就出错了。实在是搞得我头都大了。
我的 while 循环,好像循环不完,一直在哪里循环
把你的数据类型改成int不就行了int timeH,timeM,timeS;
想把int变成字符串用itoa()函数另外建议:既然你用c++为何不用输入输出流哪,那样安全也方便些
m_ConcentValue[point] = concent;
m_time[point].Format("%d:%d:%d",timeH,timeM,timeS); 这个行吗??
看看 CSring 怎么 转为整数
{
fscanf(fp,"%02d:%02d:%02d %.5f\n",&timeH,&timeM,&timeS,&concent);
m_ConcentValue[point] = concent;
m_time[point].Format("%d:%d:%d",timeH,timeM,timeS);
point++;
}
这段代码,关于数组的访问,会不会越界?如果越界,可能会报错,比如,你m_ConcentValue只有20个,你却访问了21个,那么,很容易出错!
建议你在里面做一个判断
if (point>=maxlen)
break;
其中maxlen是你的数组的最大值
我一直在关注大家的回帖,也按照大家的说法去做了,CString修改为int 类型,然后需要的时候在转化为CString 类型,但是错误还是一样存在,没有变化
再就是我定义的是一个1200个元素的数组,但是文本里面只有20个元素,应该不会是数组越界吧?
谢谢上面几个大侠的指教……
衷心感谢您们
lz从你的程序中看不出为何把timeH,timeM,timeS作为CString处理,如果换成int这段程序就没问题你的这段程序用到的类成员变量比较多,别人也没法帮你调,还得你自己调试,先确定问题出在哪里才能帮你可以先删减一部分功能看看问题是这个函数还是别处