-6

数百行のファイルを読み込もうとしています。各行はおおよそ次のようになります (これらは実際の数値ではないことに注意してください。形式の単なるサンプルです) R 111.1111 222.2222 123456 11 50.111 51.111

このファイルを fscanf で読み取ってから、いくつかの値を出力しようとしましたが、値を出力すると、すべての変数が 0 になります。ファイルを確認しましたが、すべての変数の値が 0 の行はありません。私はC++で書いています。

#include <fstream> 
#include <iostream> 
#include <string>

using namespace std;

int main(int argc, char** argv)
 {
  FILE *myfile;
  myfile = fopen("tmp.txt", "r");

  string type;
  float dx;
  float dy;
  float intensity;
  int nsat;
  float rmsy;
  float rmsx;

  if (myfile == NULL) exit(1);

  else
    {
      while ( ! feof (myfile) )
       {
      fscanf(myfile,"%s %f %f %f %i %f %f\n",&type, &dx, &dy, &intensity, &nsat, &rmsx, &rmsy);
      printf("F %f %f %f %i %f %f\n", dx, dy, intensity, nsat, rmsx, rmsy);

       }
    }
}
4

2 に答える 2

1

これを行うことができますstd::ifstream

注 このコードは、入力ファイルが常に適切にフォーマットされており、1 つのルールで欠落している値がないことを前提としています。

#include <fstream> //for ifstream
#include <string> //for strings

ifstream stream ( "tmp.txt", ios::in );
string type;
float dx;
float dy;
float intensity;
int nsat;
float rmsy;
float rmsx;

while ( stream >> type){
    stream >> dx;
    stream >> dy;
    stream >> intensity;
    stream >> rmsy;
    stream >> rmsx;

    cout << type << '\t'
        << dx << '\t'
        << dy << '\t'
        << intensity <<'\t'
        << rmsy << '\t'
        << rmsx << endl;
}

そしてinput.txt =で

 R 111.1111 222.2222 123456 11 50.111
 T 111.1111 222.2222 123456 11 50.111

これはこれを再度出力します。これはより慣用的な C++ であることに注意してください。

出力 =

R   111.111 222.222 123456  11  50.111
T   111.111 222.222 123456  11  50.111
于 2013-07-31T14:04:05.760 に答える
0

コードには複数の問題がありますが、次のとおりです。

問題は%s、フォーマット文字列の先頭にあります。%s行全体に一致するため、すべての値が含まれます。

%c数字の前に文字が 1 つしかないことが確実な場合は、おそらく代わりに使用できます。

また、std::string-Pointer を に渡したことに注意してくださいscanf。文字列 ( ) を格納するためのバッファscanfが必要なため、これは無効です。これは、必要なバッファの長さが分からないため、まったくお勧めできません。char%s

これは私のために働く:

#include <fstream> 
#include <iostream> 
#include <string>

using namespace std;

int main(int argc, char** argv)
{
  FILE *myfile;
  myfile = fopen("tmp.txt", "r");

  char type;
  float dx;
  float dy;
  float intensity;
  int nsat;
  float rmsy;
  float rmsx;

  // The NULL-if should be here, but left out for shortness
  while ( ! feof (myfile) )
  {
    fscanf(myfile,"%c %f %f %f %i %f %f",&type, &dx, &dy, &intensity, &nsat, &rmsx, &rmsy);
    printf("F %f %f %f %i %f %f\n", dx, dy, intensity, nsat, rmsx, rmsy);
  }
}
于 2013-07-31T13:46:20.843 に答える