为什么fopen不能打开一组文件中的一个?该怎么解决

为什么fopen不能打开一组文件中的一个?
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <cstddef>
#include <string>
const int NF=127;
const int NP=256;
const int buff_size=100;
const double SP_W=14000;
using namespace std;

int main(void)
{

FILE *fin[NF], *fout[NF],*ftp;

char pch[buff_size];

char filename2[NF][buff_size];

  char name_out[buff_size];

ftp=fopen("names.dat","r");

for(int i=0;i<NF;i++)
{  
strcpy(name_out," ");
fscanf(ftp,"%s",filename2[i]);

if((fin[i]=fopen(filename2[i],"r")) == NULL )
{
printf("can not open input file %s\n",filename2[i]);
exit (-1);
}

sscanf(filename2[i],"%[^d]",pch);
strcpy(name_out,strcat(pch,"simps.dat"));

fout[i]=fopen(name_out,"w");
/*fprintf(fout[i],"SIMP\n");
fprintf(fout[i],"NP=%d\n",NP);
fprintf(fout[i],"SW=%f\n",SP_W);
fprintf(fout[i],"TYPE=SPE\n");
fprintf(fout[i],"DATA\n");*/

}
for(int j=0;j<NF;j++)
{
fclose(fin[j]);
fclose(fout[j]);
fclose(ftp);

}
return 0;
}
就是读127个文件,不管怎么弄,就是读不了第127个文件(如果是128个文件也会从127出问题),会输出如can not open input file N99.14C43.06.dat.这个文件本身没有问题我打开看了,并且单读此文件可运行,将该文件替换成其他的文件也出现一样的错误。哪位高人帮我看看到底是哪里出错了啊。焦头烂额 中啊。names.dat是所有要读的文件的名字的集合,文件名太长,不想每次输入就弄成一个文件让程序读,应该没有问题。
thanks


------解决方案--------------------
C/C++ code

....
for(int j=0;j<NF;j++)
{
fclose(fin[j]);
fclose(fout[j]);
fclose(ftp);  //-------------- ?? 放到for循环外

}

------解决方案--------------------
试一试每处理完一个文件后就立即关闭:

fclose(fin[i]); //移此
fclose(fout[i]);//移此
}
//删for(int j=0;j<NF;j++)
//删{
//删fclose(fin[j]); 
//删fclose(fout[j]);
fclose(ftp);
//删}
return 0;
}
------解决方案--------------------
把你所已经读完的文件请关闭掉试试看。防止由于你的程序打开的文件太多,操作系统给它分配的资源用完了。