程序跳过输入文件的行

时间:2015-09-14 12:00:57

标签: c input output

我有这个程序应该问你温度,然后在普朗克功能中使用该温度。波长位于一个名为" 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);
}

感谢您的时间。

2 个答案:

答案 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);
 }

您还没有在代码中关闭输入文件。