锋羽l529c发热:C语言读文件的问题

来源:百度文库 编辑:高校问答 时间:2024/04/28 14:18:52
最近编了一个有关神经网络的C程序,由于需要输入大量的数据,所以想采用读文件的办法输入数据。我编的程序能正确打开文件,却读不到数据。

程序:
FILE *tset;
FILE *fset;
int i,j;
if((tset=fopen("E:\\training.dat","r"))==NULL)
{printf("can not open the training file!\n");

}
if((fset=fopen("E:\\forecast.dat","r"))==NULL)
{printf("can not open the forecast file!\n");

}
for(i=0;i<tepnum;i++)
{fscanf(tset,"%f,%f,%f,%f",&tin[i][0],&tin[i][1],&tin[i][2],&ttp[i][0]);
}
fclose(tset);
for(i=0;i<fepnum;i++)
{fscanf(fset,"%f,%f,%f",&fin[i][0],&fin[i][1],&fin[i][2]);
}
fclose(fset);

数据是这么写的:
3.6010,0.0481,0.0481,0.85
4.8723,0.0589,0.1422,-0.96
2.6400,0.0645,0.0645,0.52
3.6645,0.1706,0.1706,-0.02
5.4100,0.2504,0.2504,-0.55
11.7735,0,0.7038,-7.02
………………

这个问题怎么解决啊?谢谢大家了

可能是你控制读数的循环变量: tepnum
的值小于等于0了,没有读到数据,我给你的程序如下,
你可以把你的程序中tepnum先用常数代替,
测试一下
===================================
#include <stdio.h>
#include <errno.h>

int main(int argc,char ** argv)
{
FILE * fp1;
FILE * fp2;
float f_data[4];
int i;

if(NULL==(fp1=fopen("d:\\temp\\data1.txt","r")))
{
printf("Open file 1 error:[%s]\n",strerror(errno));
return 1;
}

if(NULL==(fp2=fopen("d:\\temp\\data2.txt","r")))
{
printf("Open file 2 error:[%s]\n",strerror(errno));
return 1;
}

printf("Open file(s) successfull!\n");

printf("Get data from file 1 : \n");
for(i=1;i<=3;i++)
{
fscanf(fp1,"%f,%f,%f,%f", &f_data[0],
&f_data[1],
&f_data[2],
&f_data[3]
);
printf("[%f][%f][%f][%f]\n",f_data[0],
f_data[1],
f_data[2],
f_data[3]
);
}

printf("Get data from file 2 : \n");
for(i=1;i<=3;i++)
{
fscanf(fp2,"%f,%f,%f", &f_data[0],
&f_data[1],
&f_data[2]
);
printf("[%f][%f][%f]\n",f_data[0],
f_data[1],
f_data[2]
);
}

fclose(fp1);
fclose(fp2);

return 0;
}
======================================
输出结果:
Open file(s) successfull!
Get data from file 1 :
[3.601000][0.048100][0.048100][0.850000]
[4.872300][0.058900][0.142200][-0.960000]
[2.640000][0.064500][0.064500][0.520000]
Get data from file 2 :
[3.601000][0.048100][0.048100]
[3.601000][0.048100][0.048100]
[3.601000][0.048100][0.048100]
Press any key to continue

我估计是你的文件里格式有问题
你可以在程序里写入再读出
大概给你写了一下
// zd_61.cpp : Defines the entry point for the console application.
//

#include <stdio.h>

int main(int argc, char* argv[])
{
int tepnum=4,fepnum=4;
float tin[4][4],fin[4][4];
FILE *tset;
FILE *fset;
int i,j;
if((tset=fopen("E:\\training.dat","r+"))==NULL)
{
printf("can not open the training file!\n");
return 0;

}
/*自己写入文件*/
fprintf(tset,"%f,%f,%f,%f\n",8.765,67.45,8.345,0.985);
fprintf(tset,"%f,%f,%f,%f\n",56.45,8.345,8.908,3.098);
fprintf(tset,"%f,%f,%f,%f\n",56.45,8.345,8.908,3.098);
fprintf(tset,"%f,%f,%f,%f\n",56.45,8.345,8.908,3.098);
fseek( tset, 0L, SEEK_SET );
/* if((fset=fopen("E:\\forecast.dat","r"))==NULL)
{
printf("can not open the forecast file!\n");
return 0;
}
*/
for(i=0;i<4;i++)
{
fscanf(tset,"%f,%f,%f,%f",&tin[i][0],&tin[i][1],&tin[i][2],&tin[i][3]);
}
fclose(tset);
/* fseek( fset, 0L, SEEK_SET )
for(i=0;i<fepnum;i++)
{
fscanf(fset,"%f,%f,%f",&fin[i][0],&fin[i][1],&fin[i][2]);
} */
// fclose(fset);
for(i=0;i<tepnum;i++)
{
for(j=0;j<4;j++)
{
printf("%f\t",tin[i][j]);
}
printf("\n");
}
return 0;
}

运行结果:
8.765000 67.449997 8.345000 0.985000
56.450001 8.345000 8.908000 3.098000
56.450001 8.345000 8.908000 3.098000
56.450001 8.345000 8.908000 3.098000
Press any key to continue