第一个问题:
这程序有两个问题:
1. 读入的格式与TXT文件不符。你的TXT是用空格来分隔数字的,而程序却用逗号。
2. 读入的行数没有记录,导致p和c两个数组中,大量空元素也被输出。
程序可以这样改:
#include "stdio.h"
#include
void main()
{
FILE *in;
FILE *out;
float a[3000],b[3000],c[3000];
float p[3000];
char infile[20],outfile[20];
int i=0,t=0,x=0;
printf("enter the infile name:\n");
scanf("%s",infile);
printf("enter the outfile name:\n");
scanf("%s",outfile);
if((in=fopen(infile,"rb"))!=NULL)/*打开源文件,读取数据*/
{
int rows = 0;
while(!feof(in))/*检查是否到达文件结尾*/
{
fscanf(in,"%f %f\n",&p[x++],&c[t++]);/*将in文件中的实数逐个读入到p数组中*/
rows ++;
}
fclose(in);/*关闭源文件*/
for(i=0;i
double a=1.5679,m=1.54543,b=1.08490,n=1.48491,Rw=0.034;
for (i=0;i
out=fopen(outfile,"w"); /*处理完成,开始输出到outfile文件*/
for (i=0; i
fclose(out);
}
else printf("can not open infile\n");
}
第二个问题:
如果只想要一列,不把东西写入数组c就行:
// 两个%f,但是只保存第一个,第二个遗弃
double no_use;
fscanf(in,"%f %f\n",&p[x++], &no_use);
输出时候:
fprintf(out,"%f\n",p[i]);
我试了一下,open文件没问题。
我编译的时候把 两个float改成了double.
我只是试了一下open,其他没有。我看了一下,你程序问题还真多。
算法细节我没看,但是 第一个 open 应该用 "r"方式,不能用"rb"
循环是不太好,但是固定3000行也是可以的。
fscanf(in,"%f,%f",&p[x++],&c[t++]);/*将in文件中的实数逐个读入到p数组中*/
这句把两个 %f 之间的逗号换成空格
/*程序被我修改为如下,不知道是否满足你的要求,满足的话就给分吧哈哈*/
#include
#include
void main()
{FILE *in;
FILE *out;
float a[3000],b[3000],c[3000];
float p[3000];
char infile[20],outfile[20];
int i=0,x=0;
printf("enter the infile name:\n");
scanf("%s",infile);
printf("enter the outfile name:\n");
scanf("%s",outfile);
if((in=fopen(infile,"rb"))!=NULL)/*打开源文件,读取数据*/
{
while(!feof(in))/*检查是否到达文件结尾*/
{
fscanf(in,"%f%f",&p[x],&c[x]);/*将in文件中的实数逐个读入到p数组中*/
x++;
}
fclose(in);/*关闭源文件*/
for(i=0;i
double a=1.5679,m=1.54543,b=1.08490,n=1.48491,Rw=0.034;
for (i=0;i
out=fopen(outfile,"w"); /*处理完成,开始输出到outfile文件*/
for (i=0; i
fclose(out);
}
else printf("can not open infile\n");
}
/*修改后的程序得到的文件中的数据如下*/
/*
0.162931
0.321832
0.699797
0.338431
0.706858
0.573628
0.499056
0.558954
0.175229
0.313424
0.213568
0.144576
*/
/*你的第二个问题我看了半天不明白什么意思,所以请原谅*/
//还有你的程序可读性很差,这次错的原因也是写的太乱,劝告你还是先一步
//一个脚印的好,最好请给分吧哈哈。
//楼主看得出来我是最用心回答的吧哈哈
1