Функция .get с открытым потоком файлов в C ++ - PullRequest
1 голос
/ 27 марта 2011

У меня есть открытый поток входных файлов.Он может успешно открыть другой файл (текстовый файл).И, внеся изменения в код, приведенный ниже, я смогу прочитать и вывести другой текстовый файл (все символы 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 (массив, измерение) приводит только кодна строка читается, а другие работают как талисман (так сказать).

Ответы [ 2 ]

4 голосов
/ 27 марта 2011

В первой версии .get(array,size) извлекает символы до символов-разделителей.По умолчанию это новая строка '\ n'.Однако, достигнув этого символа, он не извлекает его из входного потока, но оставляет его для следующей попытки ввода.Поэтому при следующем вызове get() он найдет новую строку из предыдущего get() и немедленно остановится.

.getline() работает, поскольку извлекает новую строку, а .get работает, потому что простокаждый символ по одному до конца файла.

0 голосов
/ 27 марта 2011

get (char *, int) читает до разделителя ('\ n'), но не извлекает его, поэтому он "застревает" на нем.getline удаляет его.

...