Форум программистов, компьютерный форум CyberForum.ru

Почему событие eof() файлового потока наступает очень поздно? Какова вообще его логика? - C++

Восстановить пароль Регистрация
 
Buckstabue
 Аватар для Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
14.04.2012, 23:40     Почему событие eof() файлового потока наступает очень поздно? Какова вообще его логика? #1
Вот пример, если в папке с программой разместить файл input.txt с числами "1 2 3", то в векторе sequence будут следующие элементы: 1 2 3 3
Почему так происходит? Как этого избежать?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <vector>
#inckude <fstream>
 
int main()
{
   std::vector<long> sequence;
   long temp = 0;
   std::ifstream fin("input.txt");
 
   while ( !fin.eof() )
   {
      fin >> temp;
      sequence.push_back( temp );
   }
   fin.close();
 
   for ( std::vector<long>::iterator i = sequence.begin(); i != sequence.end(); ++i )
   {
         std::cout << *i << ' ';
   }
 
   return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2012, 23:40     Почему событие eof() файлового потока наступает очень поздно? Какова вообще его логика?
Посмотрите здесь:

Переключение файлового потока ввода вывода C++
C++ Передача файлового потока как параметр-ссылка
При построчном чтении файла eof наступает раньше срока C++
Перевод потока из файлового ввода/вывода в консольный ввод/вывод C++
C++ Почему цикл с условием EOF читает последний символ 2 раза?
C++ Ошибка при использовании getline для считывания строки из файлового потока
C++ Почему если флаг состояния потока eof поднят, то флаг good опущен?
Почему не срабатывает EOF C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
14.04.2012, 23:42     Почему событие eof() файлового потока наступает очень поздно? Какова вообще его логика? #2
C++
1
2
3
4
while (fin >> temp;)
{
    sequence.push_back( temp );
}
а вывод
C++
1
copy(sequence.begin(), sequence.end(), ostream_iterator<long> (cout, " "));
Yandex
Объявления
14.04.2012, 23:42     Почему событие eof() файлового потока наступает очень поздно? Какова вообще его логика?
Ответ Создать тему
Опции темы

Текущее время: 15:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru