谢谢大家!请您帮帮忙!
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;
}
}

解决方案 »

  1.   

    在哪里出错、?Debug调试下啊
      

  2.   

    Debug调试
    点击 ! 运行 就会提示“.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++; 

    运行就会出现如题的错误。
      

  3.   

    fscanf(fp,"%02d:%02d:%02d %.5f\n",&timeH,&timeM,&timeS,&concent); 
    文件中的格式是否对应一致
      

  4.   

    格式对应是一支的
    我是直接从写入格式的地方复制过去的
    我用MessageBox();调试可以独到数据的
      

  5.   

    int point=0;
    定义int类型,是不是有益处呢,改成long试试。在下初学,愚见。
      

  6.   

    CString timeH="",timeM="",timeS="";
    fscanf(fp,"%02d:%02d:%02d %.5f\n",&timeH,&timeM,&timeS,&concent);兄弟,你这个是CString不是int。
      

  7.   

    不是上面的错误  point  我修改为 long 类型还是有错误
    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遇到问题,关闭"就出错了。实在是搞得我头都大了。
      

  8.   

    你要这么坚持我就没办法了,CString对象绝对不可以用%d来格式化输入的;其实CString对象就不能作为格式化输入的,因为你访问的是对象的地址。
      

  9.   

    这种问题如果我没有猜错的话,是因为你的编译器连接错了外部库。这种问题我前些天在弄LCC的时候遇到过。如果你想看看是不是这样的话,你可以把你的程序反编译后,找到你这行的调用处,然后看它的汇编。如果你的连接库正常的话,应该是一条call语句,然后call到一个地址,这里直接就是一条jmp语句,跳向fscanf导入函数。不正常的情况下,你的call到地方就不是jmp语句,或者jmp到不正确的导入函数处。这是由于你可能使用了若干个同时包含这个fscan定义的库。解决这个问题的方法就是找出你希望用的库,将其它库先排除掉再试试。
      

  10.   

    大侠,我学的时间步长,不知道可不可以详细一点呢。
    我的 while 循环,好像循环不完,一直在哪里循环
      

  11.   

    错误就是出在fscanf上,%d应该对应的是int变量的地址,给你给的是CString对象的地址,这样就破坏了CString对象的内存,在函数返回,CString对象析构时出错。
      

  12.   

    上面cnzdgs和mackz都说了呀,
    把你的数据类型改成int不就行了int timeH,timeM,timeS; 
    想把int变成字符串用itoa()函数另外建议:既然你用c++为何不用输入输出流哪,那样安全也方便些
      

  13.   

    读到int变量里,如果需要,再用CString的Format函数把整数转为字符串。
      

  14.   

    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); 这个行吗??
    看看 CSring 怎么 转为整数
      

  15.   

    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_ConcentValue只有20个,你却访问了21个,那么,很容易出错!
    建议你在里面做一个判断
    if (point>=maxlen)
    break;
    其中maxlen是你的数组的最大值
      

  16.   

    错误是可以延迟出现的。不是你看见MessageBox(m_time[5])看起来没问题就说明用法是对的。跟你指明错误你还不赶紧审查自己,强烈bs
      

  17.   

    不要Bs我
    我一直在关注大家的回帖,也按照大家的说法去做了,CString修改为int 类型,然后需要的时候在转化为CString 类型,但是错误还是一样存在,没有变化
    再就是我定义的是一个1200个元素的数组,但是文本里面只有20个元素,应该不会是数组越界吧?
    谢谢上面几个大侠的指教……
    衷心感谢您们
      

  18.   


    lz从你的程序中看不出为何把timeH,timeM,timeS作为CString处理,如果换成int这段程序就没问题你的这段程序用到的类成员变量比较多,别人也没法帮你调,还得你自己调试,先确定问题出在哪里才能帮你可以先删减一部分功能看看问题是这个函数还是别处