Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705

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

26.06.2011, 18:31. Показов 1618. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.06.2011, 18:31
Ответы с готовыми решениями:

Почему при движении мыши, её указатель иногда остаётся на месте?
подскажите. как будто бы дело в коврике. но тогда каким он должен быть чтобы этого не было.

А почему нельзя передавать в ф-ю добавления элемента в стек один указатель? Почему нужен именно указатель на указатель?
Вот код ф-ии добавления элемента в стек: void push1(Node **top, int d) { // top – указатель начала стека Node *pv;...

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

6
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
26.06.2011, 18:39
Цитата Сообщение от kravam Посмотреть сообщение
Это что, так должно быть? Я первый раз столкнулся с тем, что переменная инициализируется в условии!
Никакой инициализации в условии на самом деле нет. Просто итераторы потокового ввода считаются равными, если оба указывают на конец файла. При создании eof поток не указан, поэтому он изначально "указывает на конец потока"
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
26.06.2011, 18:48  [ТС]
Какого потока? Всяко до объявления eof должен быть объявлен поток, и eof будет на него указывать.

А у меня объявляются ТРИ потока!
И из них компилятор безошибочно находит тот, который будет использоваться в дальнейшем и присваивает его конец eofу, это и удивляет.
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
26.06.2011, 18:51
а зачем вообще плодить лишнюю сущность, а не юзать file.eof()
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
26.06.2011, 18:57
Любого потока. Если сравнивать два итератора для двух совершенно разных потоков, то они станут равны как только оба итератора достигнут конца каждый своего потока. А для eof вызывается конструктор по умолчанию, который сразу инициализирует его концом виртуального пустого потока.

Добавлено через 5 минут
Цитата Сообщение от Maxwe11 Посмотреть сообщение
а зачем вообще плодить лишнюю сущность, а не юзать file.eof()
В данном конкретном случае, наверное, незачем. Но потоковые итераторы, как и любые другие, могут участвовать в алгоритмах или интервальных вариантах функций. Тогда указатель на конец потока необходим.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
26.06.2011, 19:12  [ТС]
Цитата Сообщение от grizlik78 Посмотреть сообщение
Любого потока. Если сравнивать два итератора для двух совершенно разных потоков, то они станут равны как только оба итератора достигнут конца каждый своего потока.
а ну то есть это типа если бы мы использовали EOF (одинаковую для всех), только EOF переменная типа int, а eof- указатель?
0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
26.06.2011, 19:14
Цитата Сообщение от kravam Посмотреть сообщение
а ну то есть это типа если бы мы использовали EOF (одинаковую для всех), только EOF переменная типа int, а eof- указатель?
Да, только не указатель, а итератор
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.06.2011, 19:14
Помогаю со студенческими работами здесь

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

Переместить указатель в конец файла для добавления к файлу
скажи пожалуйста, а как в AT&amp;T перевести укзаталь в конец файла, чтобы туда дописать? если несложно объясни

В момент выполнения тестов рабочая директория в другом месте. Почему так?
Создал тестовую функцию, чтобы проверить, какая папка является рабочей для тестов. public void WhereIsWorkingDirectory() ...

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru