feof没法检测文件结束并且fscanf无法正常读取txt中的浮点型数据
feof无法检测文件结束并且fscanf无法正常读取txt中的浮点型数据
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void main()
{
int valnum=1; //计算数组存储值的个数
int valallnum=0; //计算全部取值的个数
double value[10]; //存储一个观察点的可能取值 精确到小数点两位
double prob[10]; //存储一个观察点取值的概率,精确到小数点两位
int num[10]; //存储对应取值的频数
double temp=0.0; //用于文件取值缓存和处理
FILE *fpsv;
FILE *fpsp;
char filename[20][10]={{"1.txt"},{"2.txt"},{"3.txt"},{"4.txt"},{"5.txt"},{"6.txt"},{"7.txt"},{"8.txt"},{"9.txt"},{"10.txt"},{"11.txt"},{"12.txt"},{"13.txt"},{"14.txt"},
{"15.txt"},{"16.txt"},{"17.txt"},{"18.txt"},{"19.txt"},{"20.txt"}}; //定义需要读取的txt文件的名称
memset(value,0,sizeof(value));
memset(prob,0,sizeof(prob));
if((fpsv=fopen("tsv.txt","w"))==NULL)
{
printf("Error in open file\n");
}
else
{
printf("Open file tsv.txt!!!!\n");
}
if((fpsp=fopen("tsp.txt","w"))==NULL)
{
printf("Error in open file\n");
}
else
{
printf("Open file tsp.txt!!!!\n");
}
for(int i=0;i<20;i++)
{
FILE *fp;
//float temp=0.0;
//if((fp=fopen("1.txt","r"))==NULL)
if((fp=fopen(filename[i],"r"))==NULL)
{
printf("Error in open file\n");
}
else
{
printf("Open file %s!!!!\n",filename[i]);
}
while(!feof(fp))
{
fscanf(fp,"%3.2lf",&temp);
printf("%3.2lf ",temp);
valallnum=valallnum+1;
if(valnum==0)
{
value[valnum]=temp;
num[valnum]++;
valnum++;
}
else
{
for(int j=0;j<valnum;j++)
{
if(temp==value[j])
{
num[j]=num[j]+1;
break;
}
if(((valnum-1)==j)&&(value[j]!=value[valnum-1]))
{
value[valnum]=temp;
num[valnum]=num[valnum]+1;
valnum=valnum+1;
break;
}
}
}
}
for(int m=0;m<valnum;m++)
{
prob[m]=((double)num[m]/(double)valallnum);
printf("%lf ",prob[m]);
}
for(int n=0;n<valnum;n++)
{
fprintf(fpsv,"%3.2f",value[n]);
fprintf(fpsp,"%3.2f",prob[n]);
}
fputc('a',fpsv);
fputc('a',fpsp);
valnum=0;
valallnum=0;
memset(value,0,sizeof(value));
memset(prob,0,sizeof(prob));
fclose(fp);
}
fclose(fpsv);
fclose(fpsp);
system("pause");
}
代码如上,程序运行后在在循环中打印出来的temp仍然是初始值,并且会陷入死循环,一直刷屏0.0
在工程目录下有20个.txt,里面存入的数据格式及类型如下:
0.016808
0.023233
0.018692
0.021362
0.027212
0.024708
0.024729
0.025938
0.026164
0.033382
0.029671
0.027669
0.030025
0.029598
0.034167
0.030607 其中是按照回车划分的 ,求解,在线等,谢谢各位大神
------解决方案--------------------
代码有点乱啊, 建议你整理一下,再发上来。 不然人家可能看头晕哦 txt也太多了。
------解决方案--------------------

不清楚你是想干嘛
不过,fopen打开方式错了,w是只读,应该添个+
if((fpsv=fopen("tsv.txt","w"))==NULL)
if((fpsp=fopen("tsp.txt","w"))==NULL)
------解决方案--------------------
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void main()
{
int valnum=1; //计算数组存储值的个数
int valallnum=0; //计算全部取值的个数
double value[10]; //存储一个观察点的可能取值 精确到小数点两位
double prob[10]; //存储一个观察点取值的概率,精确到小数点两位
int num[10]; //存储对应取值的频数
double temp=0.0; //用于文件取值缓存和处理
FILE *fpsv;
FILE *fpsp;
char filename[20][10]={{"1.txt"},{"2.txt"},{"3.txt"},{"4.txt"},{"5.txt"},{"6.txt"},{"7.txt"},{"8.txt"},{"9.txt"},{"10.txt"},{"11.txt"},{"12.txt"},{"13.txt"},{"14.txt"},
{"15.txt"},{"16.txt"},{"17.txt"},{"18.txt"},{"19.txt"},{"20.txt"}}; //定义需要读取的txt文件的名称
memset(value,0,sizeof(value));
memset(prob,0,sizeof(prob));
if((fpsv=fopen("tsv.txt","w"))==NULL)
{
printf("Error in open file\n");
}
else
{
printf("Open file tsv.txt!!!!\n");
}
if((fpsp=fopen("tsp.txt","w"))==NULL)
{
printf("Error in open file\n");
}
else
{
printf("Open file tsp.txt!!!!\n");
}
for(int i=0;i<20;i++)
{
FILE *fp;
//float temp=0.0;
//if((fp=fopen("1.txt","r"))==NULL)
if((fp=fopen(filename[i],"r"))==NULL)
{
printf("Error in open file\n");
}
else
{
printf("Open file %s!!!!\n",filename[i]);
}
while(!feof(fp))
{
fscanf(fp,"%3.2lf",&temp);
printf("%3.2lf ",temp);
valallnum=valallnum+1;
if(valnum==0)
{
value[valnum]=temp;
num[valnum]++;
valnum++;
}
else
{
for(int j=0;j<valnum;j++)
{
if(temp==value[j])
{
num[j]=num[j]+1;
break;
}
if(((valnum-1)==j)&&(value[j]!=value[valnum-1]))
{
value[valnum]=temp;
num[valnum]=num[valnum]+1;
valnum=valnum+1;
break;
}
}
}
}
for(int m=0;m<valnum;m++)
{
prob[m]=((double)num[m]/(double)valallnum);
printf("%lf ",prob[m]);
}
for(int n=0;n<valnum;n++)
{
fprintf(fpsv,"%3.2f",value[n]);
fprintf(fpsp,"%3.2f",prob[n]);
}
fputc('a',fpsv);
fputc('a',fpsp);
valnum=0;
valallnum=0;
memset(value,0,sizeof(value));
memset(prob,0,sizeof(prob));
fclose(fp);
}
fclose(fpsv);
fclose(fpsp);
system("pause");
}
代码如上,程序运行后在在循环中打印出来的temp仍然是初始值,并且会陷入死循环,一直刷屏0.0
在工程目录下有20个.txt,里面存入的数据格式及类型如下:
0.016808
0.023233
0.018692
0.021362
0.027212
0.024708
0.024729
0.025938
0.026164
0.033382
0.029671
0.027669
0.030025
0.029598
0.034167
0.030607 其中是按照回车划分的 ,求解,在线等,谢谢各位大神
------解决方案--------------------
代码有点乱啊, 建议你整理一下,再发上来。 不然人家可能看头晕哦 txt也太多了。
------解决方案--------------------
不清楚你是想干嘛
不过,fopen打开方式错了,w是只读,应该添个+
if((fpsv=fopen("tsv.txt","w"))==NULL)
if((fpsp=fopen("tsp.txt","w"))==NULL)
------解决方案--------------------