我如何读取文件的最后一行?

时间:2013-02-26 22:35:32

标签: c file

我有一个这样的文件,我从它的最后一行需要一些值。这是文件:

XFOIL Version 6.96

Calculated polar for: pane 

1 1 Reynolds number fixed Mach number fixed 

xtrf = 1.000 (top) 1.000 (bottom) 
Mach = 0.000 Re = 0.100 e 6 Ncrit = 4.000

alpha CL CD CDp CM Top_Xtr Bot_Xtr
------ -------- --------- --------- -------- -------- --------
0.000 0.3882 0.01268 0.00440 -0.0796 0.6713 1.0000

我想要做的是阅读位于最后一行的alphaCLCD的值。

我使用此代码

#include <stdio.h>
#include <stdlib.h>


int main ()
{
  FILE * pFile;
  FILE * test1;

   char ch;
   double alpha,lift,drag;
   int i;

   pFile = fopen("save.txt","r");
   test1 = fopen("test1.txt","w");

   fseek ( pFile , 434 , SEEK_SET );

  while( ( ch = fgetc(pFile) ) != EOF ){
      fputc(ch, test1);
  }

  for(i = 0; i < 3; i++)
  {

  fscanf(test1, "%lf  ",&alpha);
  fscanf(test1, "%lf ",&lift);
  fscanf(test1, "%lf",&drag);

  }

  printf("alpha = %lf  cl = %lf   cd = %lf",alpha,lift,drag);

  fclose(test1);
  fclose ( pFile );
  return 0;
}

提前谢谢你......

Guys thank you all for your answers what i forgot 

要提到的是它打印出alpha = 0.00000 cl = 0.00000 cd = 0.00000实际上非零但是  分别为0.000 0.3882 0.01268 ...... !!

1 个答案:

答案 0 :(得分:3)

   pFile = fopen("save.txt","r");
   test1 = fopen("test1.txt","w");

您正在打开save.txt进行阅读,并test1.txt进行撰写。

   fseek ( pFile , 434 , SEEK_SET );

  while( ( ch = fgetc(pFile) ) != EOF ){
      fputc(ch, test1);
  }

您现在跳到save.txt中的字符434,然后阅读文件的其余部分,将每个字符打印到test1.txt

  for(i = 0; i < 3; i++)
  {

  fscanf(test1, "%lf  ",&alpha);
  fscanf(test1, "%lf ",&lift);
  fscanf(test1, "%lf",&drag);

  }

您现在正在尝试从test1.txt读取,但它可以写入,当前位置位于文件的末尾。如果你想阅读它,你需要关闭它并打开它进行读取,或者在上面打开它读写(fopen(..., "rw")),然后在开始之前将当前位置重置到文件的开头。阅读(未定义如果不这样做将会发生什么)。

实际上,您不需要跳到字节偏移量,将最后一行复制到另一个文件中,然后读取该新文件。您可以直接从原始文件中读取最后一行。不需要从一个文件读取到另一个文件的循环;只需在原始文件上运行scanf()

请记住检查函数调用是否有错误。您所做的scanf()调用可能会返回错误。您可以使用ferror(file)检查错误,并使用strerror(errno)获取实际错误消息。