Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
#1

есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так? - C++

26.06.2011, 18:31. Просмотров 786. Ответов 6
Метки нет (Все метки)

Сабж, мистика какая-то.
Вот я так работаю
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
#include <iterator>
using namespace std;
 
int main(){ 
   ifstream file__("temp.txt", ios::binary|ios::in);
   ifstream file("ra.cpp", ios::binary|ios::in);
   ifstream file_("ra.exe", ios::binary|ios::in);
   string str;
 
   istream_iterator<unsigned char>  eof;
 
   istream_iterator<unsigned char> i(file);
   while (i!= eof) {
    str+=*i++;
   }
 
   cout<< str;
   getchar ();
   return 0;
}
Ну то есть считываю в строку файл, пока не кончится. М вот в зависимости от того, какой файл я считываю (file, file_ или file__ ) вот такой и считывается, то есть условие i!= eof вполне себе работает, получается, eof само собой присваивается конец нужного файла. Вот это да! А объявляется она Бог знает где (и не может там инициализироваться), ещё до того, как я указываю, с каким файлом работать, то есть до строки
C++
1
istream_iterator<unsigned char> i(file);
Это что, так должно быть? Я первый раз столкнулся с тем, что переменная инициализируется в условии!

Добавлено через 1 минуту
И да, eof вообще можно в самом начале объявить всё равно она будет указывать на конец нужного файла!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.06.2011, 18:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос есть указатель на конец файла и он самоинициализируется, но не в месте объявления, а когда учавствует в условии. Почему так? (C++):

Почему не работает условие в условии и так далие? - PHP
&lt;? if (!empty($_POST) &amp;&amp; !empty($_POST) &amp;&amp; !empty($_POST)) { $type = isset($_POST) &amp;&amp; in_array(intval($_POST),...

Указатель в конец файла - PHP
Есть массивы которые загоняются построчно в .txt. Как сделать, чтобы указатель становился не в начале файла а в самый конец, чтобы я мог...

Можно ли установить указатель на конец файла, не подсчитывая его размер? - C++
можно ли как нибудь уствновить указатель автоматически на конец файла не подсчитывая его размер. например я делаю так ...

Функция fread: Для чего указатель устанавливается в конец файла? - C (СИ)
Доброго времени суток! Не могу понять для чего при чтении данных с текстовго документа нужно сделать следующие действия: 1) установить...

Функции работы с типизированными файлами. Переместить указатель в конец типизированного файла - Pascal
Приветствую всех. Решил попробовать работать с типизированными файлами(тема нетрудная, но как-то я про нее забыл, вот решил сейчас...

Нужно как то различать когда есть расширение в имени файла а когда нет. Как? - C++ Builder
Когда пользователь сохраняет файл, ему нужно ввести имя файла(обычно пользователь вводит имя без расширения) а иногда пользователь хочет...

6
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,018
26.06.2011, 18:39 #2
Цитата Сообщение от kravam Посмотреть сообщение
Это что, так должно быть? Я первый раз столкнулся с тем, что переменная инициализируется в условии!
Никакой инициализации в условии на самом деле нет. Просто итераторы потокового ввода считаются равными, если оба указывают на конец файла. При создании eof поток не указан, поэтому он изначально "указывает на конец потока"
1
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
26.06.2011, 18:48  [ТС] #3
Какого потока? Всяко до объявления eof должен быть объявлен поток, и eof будет на него указывать.

А у меня объявляются ТРИ потока!
И из них компилятор безошибочно находит тот, который будет использоваться в дальнейшем и присваивает его конец eofу, это и удивляет.
0
Jupiter
Каратель
Эксперт С++
6559 / 3980 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
26.06.2011, 18:51 #4
а зачем вообще плодить лишнюю сущность, а не юзать file.eof()
0
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,018
26.06.2011, 18:57 #5
Любого потока. Если сравнивать два итератора для двух совершенно разных потоков, то они станут равны как только оба итератора достигнут конца каждый своего потока. А для eof вызывается конструктор по умолчанию, который сразу инициализирует его концом виртуального пустого потока.

Добавлено через 5 минут
Цитата Сообщение от Maxwe11 Посмотреть сообщение
а зачем вообще плодить лишнюю сущность, а не юзать file.eof()
В данном конкретном случае, наверное, незачем. Но потоковые итераторы, как и любые другие, могут участвовать в алгоритмах или интервальных вариантах функций. Тогда указатель на конец потока необходим.
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
26.06.2011, 19:12  [ТС] #6
Цитата Сообщение от grizlik78 Посмотреть сообщение
Любого потока. Если сравнивать два итератора для двух совершенно разных потоков, то они станут равны как только оба итератора достигнут конца каждый своего потока.
а ну то есть это типа если бы мы использовали EOF (одинаковую для всех), только EOF переменная типа int, а eof- указатель?
0
grizlik78
Эксперт С++
1966 / 1459 / 120
Регистрация: 29.05.2011
Сообщений: 3,018
26.06.2011, 19:14 #7
Цитата Сообщение от kravam Посмотреть сообщение
а ну то есть это типа если бы мы использовали EOF (одинаковую для всех), только EOF переменная типа int, а eof- указатель?
Да, только не указатель, а итератор
1
26.06.2011, 19:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.06.2011, 19:14
Привет! Вот еще темы с ответами:

Почему не срабатывают стили, когда они есть? - HTML, CSS
Есть сайт https://cotton-store.ru/ Недавно не ясно почему у него пропал фон из шапки. Хотя стили все как были так и остались. В...

Объясните пожалуйста почему когда так ($_SESSION['count']++ ) итерация не продолжается? - PHP
Здравствуйте всем. объясните пожалуйста почему когда так ($_SESSION++ ) итерация не продолжается? а так $_SESSION+1 продолжается? ...

Почему не видит конец файла? - Visual C++
Есть процедура записи отрезка в файл: void write_to_file(double a, double b) { FILE *file; fopen_s(&amp;file, file_name, &quot;a+&quot;); ...

Конец файла. Есть ли разница в windows и linux? - C++
Простая программа, получение данных из файла, запись в стек и вывод его на экран. К примеру, если в файле содержатся числа 11 22 33 44 55,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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