1

我只是在学习文本文件输入/输出。我输出了一个文件,其中包含一个标题和下面的 10 行数据。我现在想把它读回主函数。如果我在文本文件中省略了标题,这对我有用,但是如果我把标题留在里面,我会得到一个无限循环。 如何在读回此数据时跳过第一行(标题行),或者如果可能的话,读回标题和数据? 这是我到目前为止所拥有的:

void fileRead(int x2[], double y2[], int& n, char filename)
{
     ifstream fin ("pendulum.txt"); // fin is an input file stream

     if(!fin) //same as fin.fail()
     {
              cerr << "Failure to open pendulum.txt for input" << endl;
              exit(1);
     }

     int j = 0, dummy = 0; //index of the first value j and dummy  value
     while(!fin.eof()) //loop while not end of file
     {
           fin >> dummy >> x2[j] >> y2[j];
           cout << setw(5) << fixed << j
                << setw(12) << scientific << x2[j] << "   "
                << setw(12) << y2[j] << endl; //print a copy on screen
           j += 1;           
     }

     fin.close(); //close the input file

}
4

3 回答 3

1

您可以先读取文件的标题,然后再读取您想要的真实内容,如下所示:

string line;
getline(fin, line);//just skip the line contents if you do not want header
while (fin >> dummy >> x2[j] >> y2[j] )
{   //^^if you do not always have a dummy at the beginning of line
    //you can remove dummy when you read the rest of the file
   //do something
}
于 2013-04-17T19:55:18.933 回答
1

你最好的选择是使用

    fin.ignore(10000,'\n');

http://www.cplusplus.com/reference/istream/istream/ignore/ 这将忽略文件中的前 10000 个字符,或者忽略这些字符,直到到达换行符。10000 是相当随意的,应该是一个总是比最大​​行长更长的数字。

于 2013-04-17T20:00:28.083 回答
0

伙计,那边的这位先生帮了我很多忙。你看,每个人都说使用 getline(); 跳过一行,但问题是有时你不想在缓冲区中存储任何东西,所以 ignore() 对我来说更有意义。好吧,所以我想通过添加来支持我们的家伙的答案,您可以使用“ numeric_limits::max()” 这将使它没有限制,它会忽略直到找到分隔符...

`

  #include <iostream> 
  #include <fstream>
  #include <limits>

  using std::streamsize;

  int main() {
      ifstream fin ("pendulum.txt");
      fin.ignore(numeric_limits<streamsize>::max(),'\n');
  }

`

http://www.cplusplus.com/reference/limits/numeric_limits/

于 2017-04-28T07:45:29.370 回答