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

私がやりたいのは、最後の行にあるalphaCLおよびの値を読み取ることです。CD

私はこのコードを使用します

#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 に答える