提取一实验数据有40组每组402个我用c++ builder 便的运行时出现access violation 错误,由于本人水平能够有限,求高人解答,
附上代码及数据,数据是图片
//---------------------------------------------------------------------------
#include <vcl\vcl.h>
#pragma hdrstop
#include "ttg.h"
#include "YOKO.h"
#include "wbsfunc.h"
//---------------------------------------------------------------------------
#pragma resource "*.dfm"
TSweepForm *SweepForm;
//---------------------------------------------------------------------------
__fastcall TSweepForm::TSweepForm(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TSweepForm::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TSweepForm::Button1Click(TObject *Sender)
{
char *memo[] = {
"实验日期: ", // 00
"实验员: ", // 02
"备注: ", // 03
"个数: ",
" N B f Q Y C f k f f",
"------+-------+-------+-------+-------+-------+-------+-------+-------+" };
FILE *rfp, *wfp;
AnsiString s;
struct ReadData { double fo,Ymo; } *RD[401];
double Ym1,Ym2,Ymax,Ph1,Ph2;
char nblt[20];
char ibuf[3][80], str[80];
char imemo[40][256], hbuf[60][256];
int ndata;
char iww[410][80];
double ffs, ffe, if0, f0, f1, f2, fQm;
double iREAL, REAL0, iIMAG;
double dx1, dx2,ss,fd1,fd2,fd,yms,k33;
int j,n, nn,m;
char wk0[256],wk[256], wk1[256], buf[256],wk2[256],wk3[256],wk4[256],wk5[256],wk6[256],wk7[256];
float Lmax;
char bbuf[256][10];
for (n = 0; n<4; n++) memset(imemo[n], 0, 80);
strcpy(str, LoopForm->OpenDialog5->FileName.c_str());
rfp = fopen(str, "rt");
for (n = 0; n<4; n++) {
fgets(buf, 80, rfp);
buf[strlen(buf) - 1] = 0;
sscanf(buf,"%*[^:]:%*[ ]%s",imemo[n]);
}
for (n = 0; n<6; n++) {
strcpy(hbuf[n], memo[n]);
if (n<4)strcpy(hbuf[n] + 14, imemo[n]);
}
for (n = 6; n<60; n++) { memset(hbuf[n], ' ', 256); hbuf[n][255] = 0; }
for (ndata = 0; ndata < 60; ndata++) {
fgets(str, 80, rfp);
str[strlen(str) - 1] = 0;
strcpy(ibuf[ndata], str);
if (feof(rfp)) break;
if (ndata == 0) sscanf(ibuf[0] + 7, "%f", &Lmax);
sprintf(wk, "%3d %6.1f %s ", ndata, Lmax, ibuf[1]);
for (n = 0; n < 402; n++) {
fgets(iww[n], 80, rfp);
sscanf(iww[n], "%d %lf %lf", &nn, &Ym1, &Ph1);
}
sscanf(iww[0], "%lf %lf", &ffs, &ffe);
ffs=ffs/1000; ffe=ffe/1000;
f0 = 0;
Ymax=0;
for(n=2;n<403;n++) {
sscanf(iww[n],"%lf %lf %lf",&if0,&Ym1,&Ph1);
dx1=ffs+(ffe-ffs)/400.0*(double)(n-2);
if(Ymax<Ym1) { f0=dx1; Ymax=Ym1; nn=(int)if0; }
}
yms=Ymax/sqrt(2.0);
f2=0;
for (n = 1; n < 402; n++) {
sscanf(iww[n], "%lf %lf %lf", &if0, &Ym2, &Ph1);
if ((Ym1 >= yms) && (yms>Ym2)) {
if ((Ym2 - Ym1) != 0.0) {
s = (yms - Ym1) / (Ym2 - Ym1) + (double)(n - 2);
}
else {
s = 0.0;
}
f2 = s * (ffe - ffs) / 400.0 + ffs;
break;
}
Ym1 = Ym2;
}
f1=0;
for (n = 401; n > 1; n--) {
sscanf(iww[n], "%lf %lf %lf", &if0, &Ym1, &Ph1);
if ((Ym1 <= yms) && (yms<Ym2)) {
if ((Ym2 - Ym1) != 0.0) {
s = (yms - Ym1) / (Ym2 - Ym1) + (double)(n - 1);
}
else {
s = 0.0;
}
f1 = s * (ffe - ffs) / 400.0 + ffs;
break;
}
Ym2 = Ym1;
}
fQm=0;
if ((f2 - f1) != 0.0) fQm = f0 / (f2 - f1);
fd1 = 0.0; fd2 = 0.0;
Ph1 = 0.0; Ph2 = 0.0;
for (n = 1; n < 402; n++) {
sscanf(iww[n], "%lf %lf %lf", &if0, &Ym2, &Ph2);
if (n == 2) { Ph1 = Ph2; continue; }
if (Ph1*Ph2<0.0) {
if (Ph1>Ph2) {
if ((Ph2 - Ph1) != 0.0) {
s = (-Ph1) / (Ph2 - Ph1) + (double)(n - 2);
}
else {
s = 0.0;
}
fd1 = s * (ffe - ffs) / 400.0 + ffs;
}
else if (Ph1<Ph2) {
if ((Ph2 - Ph1) != 0.0) {
s = (-Ph1) / (Ph2 - Ph1) + (double)(n - 2);
}
else {
s = 0.0;
}
fd2 = s * (ffe - ffs) / 400.0 + ffs;
}
}
Ph1 = Ph2;
if ((fd1 != 0.0) && (fd2 != 0.0)) break;
}
fd = fd2 - fd1;
if (fd != 0.0){
k33 = 1.0 / sqrt(0.405*f0 / fd + 0.81);
}
else k33=0; //以下結果保存
sprintf(wk0, "%3d", ndata+1);
sprintf(wk, "%5.f", Lmax+ndata);
sprintf(wk1, "%7.2f", f0);
sprintf(wk2, "%7.2f", fQm);
sprintf(wk3, "%7.2f", Ymax);
sprintf(wk4, "%7.2f", fd);
sprintf(wk5, "%7.2f", k33);
sprintf(wk6, "%7.2f", ffs);
sprintf(wk7, "%7.2f", ffe);
memcpy(hbuf[ndata + 6] , wk0, strlen(wk0)); //N
memcpy(hbuf[ndata + 6] + 5 , wk , strlen(wk)); //B
memcpy(hbuf[ndata + 6] + 13, wk1, strlen(wk1)); //f
memcpy(hbuf[ndata + 6] + 22, wk2, strlen(wk2)); //f
memcpy(hbuf[ndata + 6] + 29, wk3, strlen(wk3)); //Ym
memcpy(hbuf[ndata + 6] + 43, wk4, strlen(wk3)); //f
memcpy(hbuf[ndata + 6] + 51, wk5, strlen(wk3)); //k
memcpy(hbuf[ndata + 6] + 61, wk6, strlen(wk3)); //f
memcpy(hbuf[ndata + 6] + 69, wk7, strlen(wk3)); //fe
hbuf[ndata + 6][96] = 0;
}
fclose(rfp);
s = LoopForm->OpenDialog5->FileName;
j=AnsiPos("ipa",LowerCase(s));
s.Delete(j,3);
s.Insert("tlg",j);
strcpy(str,s.c_str());
wfp=fopen(str,"w");
for(n=0;n<ndata+6;n++) fprintf(wfp,"%s\n",hbuf[n]);
fclose(wfp);
}
//---------------------------------------------------------------------------