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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Buckstabue
175 / 124 / 6
Регистрация: 12.01.2012
Сообщений: 624
#1

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

14.04.2012, 23:40. Просмотров 447. Ответов 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() файлового потока наступает очень поздно? Какова вообще его логика?
Посмотрите здесь:

При построчном чтении файла eof наступает раньше срока - C++
Здравствуйте, товарищи! Столкнулся с такой проблемой: при построчном потоковом чтении файла (при помощи getline) бит eof...

Почему если флаг состояния потока eof поднят, то флаг good опущен? - C++
Почему если флаг состояния потока eof поднят, то флаг good опущен? Это нонсенс, друзья. Здесь прочтём, что флаг goodbit потока...

Работа функции feof() и вообще трудности понимания EOF - C++
Заранее прошу простить за тупые вопросы :) В связи с очевидным недоумством я не понимаю 1.foef считала что то за файлом , почему...

Передача файлового потока в функцию - C++
Здрасти. ifstream in(&quot;1.txt&quot;); что возвращает in? как передать этот поток (in) в функцию которая выводит символы? void...

Переключение файлового потока ввода вывода - C++
Есть прога. Если закоментить первый цикл то будет читать из файла, если второй то будет его писать. Теперь вопрос: как её заставить делать...

Передача файлового потока как параметр-ссылка - C++
Как привести в реальность эту конструкцию? VS6 после ifstream fin (&quot;test&quot;); res = wordsearch (fin); выдавала...

Перевод потока из файлового ввода/вывода в консольный ввод/вывод - C++
Есть кусок программы: freopen (&quot;G:\\input.txt&quot;, &quot;r&quot;, stdin); freopen (&quot;G:\\output.txt&quot;, &quot;w&quot;, stdout); //Открываем файлы - один...

Ошибка при использовании getline для считывания строки из файлового потока - C++
Ошибка находится в 24 строке на точке. Код, подобный этому (а в этой строке фактически 1 в 1 одинаковый) я разбирал в институте. Видимо...

Почему не срабатывает EOF - C++
У меня стоит Visual Studio 2010 написал простенькую программу #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; int main() { int...

Почему цикл с условием EOF читает последний символ 2 раза? - C++
Данная программа читает двоичную строку и выводит длину самой продолжительной цепочки нулей. Почему мой цикл читает 2 раза последнее...

Почему не сравнивает строки и вообще не заходит в цикл? - C++
void arr::Dateout() { string b; cout &lt;&lt; &quot;Input date of creating file:&quot;; getline(cin, b); for (int i = 0; i &lt; 4; i++) { ...

Реализовать односвязный список, в котором бы логика обхода его элементов задавалась бы пользователем. - 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, " "));
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru