1

テキストファイルの入力/出力について学んでいます。ヘッダーとその下に 10 行のデータを含むファイルを出力しました。これをメイン関数に読み返したいと思います。これは、テキスト ファイルのヘッダーを省略した場合には機能しますが、ヘッダーをそのままにしておくと、無限ループが発生します。 このデータを読み返す際に 1 行目 (ヘッダー行) をスキップするにはどうすればよいですか? または、可能であれば、ヘッダーとデータを読み返すにはどうすればよいですか? これが私がこれまでに持っているものです:

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

あなたの最善の策は、使用することです

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

http://www.cplusplus.com/reference/istream/istream/ignore/ これにより、ファイルの最初の 10000 文字が無視されるか、改行に達するまで文字が無視されます。10000 はかなり恣意的であり、常に最大行長よりも長い数値にする必要があります。

于 2013-04-17T20:00:28.083 に答える
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 に答える