繁体   English   中英

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

[英]How I do read the last line of a 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 ...

   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)获取实际的错误消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM