-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

note 这段代码并不假定输入文件的格式总是很好,并且一条规则上没有任何值丢失

#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改用,如果您确定,数字前只有一个字符。

另请注意,您将 -Pointerstd::string传递给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 回答