1

我有一个打开的输入文件流。它能够成功打开另一个文件(一个txt文件)。通过对下面的代码进行调整,我可以读取并输出另一个 txt 文件(所有 ASCII 字符,只是字母)就好了。但是,我正在使用以下功能。这导致读取一行,而实际上是三行。我想知道为什么。数组的大小不是问题,即,使它变大似乎并不能解决任何问题。

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) 会导致只读取一行,而其他行就像一个魅力(可以这么说)。

4

2 回答 2

4

在第一个版本中,.get(array,size)提取字符直到分隔字符。默认情况下,这是一个换行符,'\n'。但是,一旦到达该字符,它就不会从输入流中提取它,而是将其留给下一次输入尝试。因此,下次您调用get()它时,它将从前一个中找到换行符get()并立即停止。

之所以.getline()有效,是因为它提取了换行符,而.get之所以有效,是因为它一次只获取每个字符,直到文件结束。

于 2011-03-26T21:40:14.743 回答
0

get(char*, int) 一直读取到分隔符 ('\n') 但不提取它 - 所以它会“卡住”它。getline 将其删除。

于 2011-03-26T21:38:48.330 回答