我有这个程序应该问你温度,然后在普朗克功能中使用该温度。波长位于一个名为" inputwave.dat"的文件中。 看起来像
500
1000
1500
2000
.
.
.
11500
12000
(间隔500到12,000。每个都在自己的行上)
我遇到的问题是它只会打印出其他每一行。
所以就像
"500 ....
1500 ....
2500 ....
3500 ...."
我希望它打印出每一行,在我的代码中发生了这种情况,我似乎无法找到任何可能导致它跳过一行的内容。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double planck(double wave, double T);
int main()
{
double wave,T;
double result;
int ni;
char outfile[80];
FILE *out,*in;
in = fopen("inputwave.dat","r");
printf("\nEnter the temperature in Kelvin > ");
ni = scanf("%lf",&T);
printf("\nEnter the name of the output file > ");
ni = scanf("%s",outfile);
if((out = fopen(outfile,"w")) == NULL)
{
printf("\nCannot open %s for writing\n",outfile);
exit(1);
}
while(fscanf(in,"%lf",&wave) != EOF)
{
fscanf(in,"%d",&wave);
result = planck(wave,T);
fprintf(out,"%7.1f %e\n",wave,result);
}
fclose(out);
return(0);
}
double planck(double wave, double T)
{
static double p = 1.19106e+27;
double p1;
p1 = p/(pow(wave,5.0)*(exp(1.43879e+08/(wave*T)) - 1.0));
return(p1);
}
感谢您的时间。
答案 0 :(得分:2)
首先,试试这个(即不要两次致电fscanf
):
while(fscanf(in,"%lf",&wave) != EOF)
{
result = planck(wave,T);
fprintf(out,"%7.1f %e\n",wave,result);
}
在它正确检查fscanf
的返回值之后。此函数返回成功填充的参数列表的项数。因此,只有当此返回值正好为1时,才应执行此while
的正文。因此,最好更改检查:
while(fscanf(in,"%lf",&wave) == 1)
答案 1 :(得分:1)
您拨打fscanf
两次。这一行 -
fscanf(in,"%d",&wave); // passing wrong argument to printf %d expects a integer you pass a double
试试这个 -
while(fscanf(in,"%lf",&wave)==1)
{
result = planck(wave,T);
fprintf(out,"%7.1f %e\n",wave,result);
}
您还没有在代码中关闭输入文件。