1

バイナリまたはテキスト ファイルからリンク リストをロードするために使用するこのコードがあります。テキスト ファイルでは問題なく動作しますが、バイナリの場合は常に余分な行がロードされるため、getline の仕組みを知る必要があります。

while(1)
{
     if(!file.good())
          break;

     getline(file,line);
     student.name=line;

     getline(file,line);
     student.phone=line;

     current->insert(student);
}
4

2 に答える 2

3

常に余分な行をロードします

もちろん、正常読み取られたことを確認せずに、読んだ内容を挿入しています。

読んだfile.good()、テストを移動する必要があります。

goodさらに、明示的にテストする必要はありません。の結果はgetlineすでにステータスを示しています。ループ内のファイルから単純なデータをロードする標準的な方法は、次のとおりです。

student_type student;
while (getline(file, student.name) and getline(file, student.phone))
    current->insert(student_type(student)); // Makes explicit copy!
于 2011-04-09T20:39:01.513 に答える
2

getline()は、\nまたはEOFで終了する行を読み取ります。

したがって、バイナリファイルではあまり意味がありません。

文字は、(n-1)文字が抽出されるか、区切り文字が見つかるまで抽出されます(このパラメーターが指定されている場合はdelim、それ以外の場合は'\ n')。入力シーケンスでファイルの終わりに達した場合、または入力操作中にエラーが発生した場合も、抽出は停止します。

于 2011-04-09T20:37:58.707 に答える