0

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

XFOIL 版本 6.96

计算的极坐标:窗格

1 1 雷诺数固定 马赫数固定

xtrf = 1.000(顶部) 1.000(底部)
马赫 = 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 ...!!

4

1 回答 1

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

您现在跳到 434 中的字符save.txt,然后读取文件的其余部分,将每个字符打印到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)

于 2013-02-26T22:53:02.887 回答