大问题:fopen读取出错?????
程序执行后到显示 iii=2557,ct2=4,ct=4,flag=0;can not fopen ct2.txt 出错了,试了好几次,但不知哪里有问题,是我的电脑配置还是程序?(直接输入2进行)
// ReadExcelDlg.cpp : Implementierungsdatei
#include "stdafx.h"
#include "ReadExcel.h"
#include "ReadExcelDlg.h"
#include "odbcinst.h"
#include "windows.h"
#include "stdio.h"
long NUM;
FILE *fps,*fpt,*fpc2,*fpc,*fpf,*pn;
//long num();
long getto();
int count(long iii);
int count2(long iii);
CString source(long iii);
CString target(long iii);
void mflag();
void cdf();
int getcdf(char sk1[20]);
int flag(long iii);
int flag2(char sk[20],char sk0[20]);
///////////////////////////////////////////////////
void main()
{
FILE *p;
CString si,ti,s0,t0,tj;
//long jj;
int flagg,ct2,ct22=0,ct,ctn;
int numc=1,flagd,flagcd;
int sp;
long cc=0,cd=0,dc=0,dd=0;
long iii=0;
char n='n';
char ctc[100000];
char sou[20],tar[20],sk[20],sk0[20],sk1[20];
printf("请输入步骤:0 1 2\n");
scanf("%d",&sp);
switch(sp)
{
case 0: //初始化NUM,flag...
NUM=getto();
//sour=source(2);
//tar=target(2);
//printf("%s %s\n",sour,tar);
printf("%d\n",NUM);
if((pn=fopen("num.txt","w"))==NULL)
{
printf("cannot open num.txt\n");
exit(0);
}
fprintf(pn,"%d",NUM);
fclose(pn);
/////////////////////////////////////////////
//制造目标地址唯一的标志,flag=1表示唯一,flag=0不唯一
if((fpf=fopen("flag.txt","w+"))==NULL)
{
printf("cannot open flag.txt\n");
exit(0);
}
mflag();
exit(0);
case 1:
cdf();
exit(0);
default:printf("计算开始...\n");
}
/* for(iii=1;iii<24;iii++)
{
si=source(iii);
printf("%s\n",si);
}*/
/*if((fpc=fopen("ct.txt","r"))==NULL)
{
printf("cannot open ct.txt\n");
exit(0);
}*/
//获取NUM/////////////////////////
if((pn=fopen("num.txt","r"))==NULL)
{
printf("cannot open num.txt\n");
exit(0);
}
fscanf(pn,"%d",&NUM);
fclose(pn);
printf("%d\n",NUM);
if((p=fopen("source.txt","r"))==NULL)
{
printf("cannot open source.txt\n");
exit(0);
}
//for(iii=1;iii<=NUM;iii++)
while(iii<=NUM)
{
fscanf(p,"%d %s %s",&iii,sou,tar);
ct2=count2(iii); // 计算源地址相同的个数
ct=count(iii); // 计算源地址和目标地址都相同的个数
flagg=flag(iii); // flagg=1 时唯一
printf("iii=%d ct2=%d ct=%d flag=%d ",iii,ct2,ct,flagg);
si=sou;
ti=tar;
//cd=cd+1;
if(ct==ct2)
{
if(flagg)
{
cc=cc++; //cc
//cd=cd-1;
}
else
{
strcpy(sk,si);
strcpy(sk0,ti);
if(flag2(sk,sk0))
{
dc=dc++;
//cd=cd-1;
}
else
{
dd=dd++;//dc
//cd=cd-1;
}
//cd=cd-1;
}
}
printf("CC-%d CD-%d DC-%d DD-%d\n",cc,cd,dc,dd);
if(iii==NUM) break;
}//循环结束
fclose(p);
dd=NUM-cc-cd-dc; //多对一
printf("CC-%d CD-%d DC-%d DD-%d\n",cc,cd,dc,dd);
}
//华丽丽的分界线
////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////
// 读取cd.txt,得到一对多的判断标志1
int getcdf(char sk[20])
{
FILE *cdp;
long ii;
int f;
char sk1[20],sk2[20];
CString s1,t1,s,t;
s=sk;
if((cdp=fopen("cd.txt","r"))==NULL)
{
printf("cannot open cd.txt\n");
exit(0);
}
while(1)
{
fscanf(cdp,"%s %d",sk1,&f);
s1=sk1;
if(s==s1)
{
return f;
fclose(cdp);
}
}
fclose(cdp);
}
int flag2(char sk[20],char sk0[20]) //目标相同,源地址不同,返回0表示多对多,1表示多对一
{
FILE *fp;
long ik;
int f=1,cot2,cot;
char sk1[20],sk2[20];
CString s1,t1,s,t;
s=sk;
t=sk0;
if((fp=fopen("source.txt","r"))==NULL)
{
printf("cannot open source.txt\n");
exit(0);
}
while(1)
{
fscanf(fp,"%d %s %s",&ik,sk1,sk2);
s1=sk1;
t1=sk2;
if(t1==t)
{
if(s1!=s)
{
cot2=count2(ik);
cot=count(ik);
if(cot2!=cot)
{
f=0;
return f;
fclose(fp);
}
if(ik==NUM) return f;
}
if(ik==NUM) return f;
}
if(ik==NUM) return f;
}
}
long getto()
{
//for get driver...
char szBuf[2001];
WORD cbBufMax = 2000;
WORD cbBufOut;
char *pszBuf = szBuf;
CString sDriver;
//for read the file...
int i=0,ci=1,sci=1,cj;
long ii=0,numb=0;
char s[60];
CDatabase database;
CString sSql;
CString sItem1,sItem2,sItem3,tsItem,ssItem;
CString sDsn;
CString sFile;// the file name.
/////////////
//建立txt文件source.txt target.txt
fps=fopen("source.txt","w+");
fpt=fopen("target.txt","w+");
fpc2=fopen("ct2.txt","w");
fputs(" ",fpc2);
fpc=fopen("ct.txt","w");
fputs(" ",fpc);
////////////////////////////////////
// 进入读取
///////////////////////////////////
for(i=0;i<=60;i++)
{
sprintf(s,"%s%d%s","min",i,".xls");
CString cs=s;
sFile=cs;
printf("%s --> source.txt target.txt ",cs);
///////////////////////////////////////
// Get the names of the installed drivers
//////////////////////////////
....
.... while( !recset.IsEOF() )
{
//Read the result line
//recset.GetFieldValue("num",sItem4);
recset.GetFieldValue("time",sItem1);
recset.GetFieldValue("source",sItem2);
recset.GetFieldValue("Target",sItem3);
numb++;
///////////////////////////////////////
// 计算源地址相同个数,源地址目标地址相同个数
if(numb==1)
{
ssItem=sItem2;
tsItem=sItem3;
}
else
{
if(ssItem==sItem2)
{
ci++;
if(tsItem==sItem3)
sci++;
}
else
{
for(cj=0;cj<ci;cj++) fprintf(fpc2,"%d ",ci);
for(cj=0;cj<ci;cj++) fprintf(fpc,"%d ",sci);
ssItem=sItem2;
tsItem=sItem3;
sci=1;
ci=1;
}
}
////////////////
// 数据传送
////////////////////////////////
//fputs(" ",fps);
//fputs(sItem2,fps);
fprintf(fps,"%d %s %s\n",numb,sItem2,sItem3);
fputs(" ",fpt);
fputs(sItem3,fpt);
// Skip to the next resultline
recset.MoveNext();
}
// Close the database
database.Close();
//system("cls");
for(cj=0;cj<ci;cj++) fprintf(fpc2,"%d ",ci);
for(cj=0;cj<ci;cj++) fprintf(fpc,"%d ",sci);
printf("ok!\n");
}
CATCH(CDBException, e)
{
// A database exception occured. Pop out the details...
AfxMessageBox("Database error: "+e->m_strError);
}
END_CATCH;
} //循环到此结束
//fputs(" ",fps);
fclose(fps);
fputs(" ",fpt);
fclose(fpt);
fclose(fpc2);
fclose(fpc);
return numb;
}
//////////////////////////////////////////////////////////////////////////////////////////
// get source...
CString source(long iii)
{
int l=0;
long ii=0;
char sk1[20],sk2[20];
CString s,sk;
if((fps=fopen("source.txt","r"))==NULL)
{
printf("cannot open source.txt\n");
exit(0);
}
while(1)
{
fscanf(fps,"%d %s %s",&ii,&sk1,&sk2);
s=sk1;
if(ii==iii)
{
fclose(fps);
return s;
break;
}
/*if(fgetc(fps)==' ')
{
ii++;
if(ii==iii)
{
while(fgetc(fps)!=' ')
l++;
fseek(fps,-(l+1),1);
s=fgetc(fps);
while(l!=1)
{
sk=fgetc(fps);
sprintf(sk1,"%s%s",s,sk);
s=sk1;
l--;
}
fclose(fps);
return s;
break;
}
}*/
}
}
////////////////////////////////////////////////////////////////////////////////////////////////
// get target...
CString target(long iii)
{
int l=0;
long ii=0;
char sk1[20],sk2[20];
CString s,sk;
if((fps=fopen("source.txt","r"))==NULL)
{
printf("cannot open source.txt\n");
exit(0);
}
while(1)
{
fscanf(fps,"%d %s %s",&ii,&sk1,&sk2);
s=sk2;
if(ii==iii)
{
fclose(fps);
return s;
break;
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////
// 计算源地址相同的个数
int count2(long iii)
{
int l=0;
long ii=0;
char sk1[20];
CString s,sk;
if((fpc2=fopen("ct2.txt","r"))==NULL)
{
printf("cannot open ct2.txt\n");
exit(0);
}
while(1)
{
if(fgetc(fpc2)==' ')
{
ii++;
if(ii==iii)
{
while(fgetc(fpc2)!=' ')
l++;
fseek(fpc2,-(l+1),1);
s=fgetc(fpc2);
while(l!=1)
{
sk=fgetc(fpc2);
sprintf(sk1,"%s%s",s,sk);
s=sk1;
l--;
}
fclose(fpc2);
return atoi(s);
break;
}
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////
// 计算源地址和目标地址都相同的个数
int count(long iii)
{
int l=0;
long ii=0;
char sk1[20];
CString s,sk;
if((fpc=fopen("ct.txt","r"))==NULL)
{
printf("cannot open ct.txt\n");
exit(0);
}
while(1)
{
if(fgetc(fpc)==' ')
{
ii++;
if(ii==iii)
{
while(fgetc(fpc)!=' ')
l++;
fseek(fpc,-(l+1),1);
s=fgetc(fpc);
while(l!=1)
{
sk=fgetc(fpc);
sprintf(sk1,"%s%s",s,sk);
s=sk1;
l--;
}
fclose(fpc);
return atoi(s);
break;
}
}
}
}
//////////////////////////
// 获取目标地址唯一标志,flag=1 时唯一,flag=0不唯一
int flag(long iii)
{
//省略,这里没问题
}
/////////////////////////////////////////////////////////////////////////////////////////////////
//制造目标地址唯一的标志,flag=1表示唯一,flag=0不唯一//存放目标相同对应的源地址数据
void mflag()
{//这里没问题
}