1

入力ファイルストリームを開いています。他のファイル(txtファイル)を正常に開くことができます。そして、すぐ下のコードを調整することで、他のtxtファイル(すべてASCII文字、文字のみ)を読み取って出力することができます。しかし、私は以下の機能をいじっていました。これにより、実際には3行あるのに、1行が読み取られます。理由を知りたい。配列のサイズは問題ではありません。つまり、配列を大きくしても何も修正されないようです。

void DispFile(fstream& iFile)
{
     auto char fileChar[256];

     while (inFile.get(fileChar,256))
           {                                 

            cout << fileChar;

           }

}

動作するコードは次のとおりです。

void DispFile(fstream& iFile)
{
   auto char fileChar[256];


   while (inFile.getline(fileChar,256))
   {
   cout << fileChar;
   cout << endl;
   }
}

また

void DispFile(fstream& iFile)
{

   char file;

   while (inFile.get(file)
   {
   cout << file;
   }

}

では、なぜinFile.get(array、dimension)を使用すると、1行だけが読み取られ、他の行は(いわば)魅力のように機能するのでしょうか。

4

2 に答える 2

4

最初のバージョンでは.get(array,size)、区切り文字まで文字を抽出します。デフォルトでは、これは改行'\n'です。ただし、この文字に到達すると、入力ストリームから抽出せず、次の入力試行のために残します。したがって、次に電話をかけるget()と、前の改行が見つかり、get()すぐに停止します。

.getline()改行を抽出するために機能し、ファイルの.get終わりまで各文字を1つずつ取得するだけで機能します。

于 2011-03-26T21:40:14.743 に答える
0

get(char *、int)は、デリミネーター('\ n')まで読み取りますが、それを抽出しません。そのため、デリミネーターに「スタック」します。getlineはそれを削除します。

于 2011-03-26T21:38:48.330 に答える