一个关于C语言文件输入输出的程序问题 高分悬赏
我的问题是要从TXT文件中读入两列数据,(A)(B)5.50.36.50.142.30.1330.2240.0940.114.30.126.80.08100.195.50...
我的问题是 要从TXT文件中读入两列数据, (A) (B) 5.5 0.3 6.5 0.14 2.3 0.13 3 0.22 4 0.09 4 0.11 4.3 0.12 6.8 0.08 10 0.19 5.5 0.16 13.4 0.13 15.8 0.17 要求是读入这两列数据,经过程序处理,比如:Z=A*X+B*Y 得到处理后的数据放在一个数组中,通过输出文件输出。 我的程序如下: #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: "); scanf("%s",infile); printf("enter the outfile name: "); scanf("%s",outfile); if((in=fopen(infile,"rb"))!=NULL)/*打开源文件,读取数据*/ { while(!feof(in))/*检查是否到达文件结尾*/ { fscanf(in,"%f,%f",&p[x++],&c[t++]);/*将in文件中的实数逐个读入到p数组中*/ } fclose(in);/*关闭源文件*/ for(i=0;i<3000;i++) printf("%f,%f ",p[i],c[i]); double a=1.5679,m=1.54543,b=1.08490,n=1.48491,Rw=0.034; for (i=0;i<3000;i++) p[i]=pow((a*b*Rw)/(p[i]*pow(c[i],m)),1/n); out=fopen(outfile,"w"); /*处理完成,开始输出到outfile文件*/ for (i=0; i<3000; i++) fprintf(out,"%f ",p[i]); fclose(out); } else printf("can not open infile "); } 运行结果显示读入的数据不对,都是-107374,0000,-107374,0000. 那输出就更不对了。 不知道程序哪里错了,请大家指点。 第2个问题,要是只从TXT文件输入一列数据,经过处理以后输出一列数据,通过TXT文件输出,这样程序又是什么样的。 一共两个问题,悬赏200分,谢谢大家拉 谢谢大家
展开
1个回答
展开全部
第一个问题:
这程序有两个问题:
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:
");
scanf("%s",infile);
printf("enter
the
outfile
name:
");
scanf("%s",outfile);
if((in=fopen(infile,"rb"))!=NULL)/*打开源文件,读取数据*/
{
int
rows
=
0;
while(!feof(in))/*检查是否到达文件结尾*/
{
fscanf(in,"%f
%f
",&p[x++],&c[t++]);/*将in文件中的实数逐个读入到p数组中*/
rows
++;
}
fclose(in);/*关闭源文件*/
for(i=0;i<rows;i++)
printf("%f,%f
",p[i],c[i]);
double
a=1.5679,m=1.54543,b=1.08490,n=1.48491,Rw=0.034;
for
(i=0;i<rows;i++)
p[i]=pow((double)(a*b*Rw)/(p[i]*pow((double)c[i],(double)m)),1/n);
out=fopen(outfile,"w");
/*处理完成,开始输出到outfile文件*/
for
(i=0;
i<rows;
i++)
fprintf(out,"%f
",p[i]);
fclose(out);
}
else
printf("can
not
open
infile
");
}
第二个问题:
如果只想要一列,不把东西写入数组c就行:
//
两个%f,但是只保存第一个,第二个遗弃
double
no_use;
fscanf(in,"%f
%f
",&p[x++],
&no_use);
输出时候:
fprintf(out,"%f
",p[i]);
这程序有两个问题:
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:
");
scanf("%s",infile);
printf("enter
the
outfile
name:
");
scanf("%s",outfile);
if((in=fopen(infile,"rb"))!=NULL)/*打开源文件,读取数据*/
{
int
rows
=
0;
while(!feof(in))/*检查是否到达文件结尾*/
{
fscanf(in,"%f
%f
",&p[x++],&c[t++]);/*将in文件中的实数逐个读入到p数组中*/
rows
++;
}
fclose(in);/*关闭源文件*/
for(i=0;i<rows;i++)
printf("%f,%f
",p[i],c[i]);
double
a=1.5679,m=1.54543,b=1.08490,n=1.48491,Rw=0.034;
for
(i=0;i<rows;i++)
p[i]=pow((double)(a*b*Rw)/(p[i]*pow((double)c[i],(double)m)),1/n);
out=fopen(outfile,"w");
/*处理完成,开始输出到outfile文件*/
for
(i=0;
i<rows;
i++)
fprintf(out,"%f
",p[i]);
fclose(out);
}
else
printf("can
not
open
infile
");
}
第二个问题:
如果只想要一列,不把东西写入数组c就行:
//
两个%f,但是只保存第一个,第二个遗弃
double
no_use;
fscanf(in,"%f
%f
",&p[x++],
&no_use);
输出时候:
fprintf(out,"%f
",p[i]);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询