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

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

26.06.2011, 18:31. Показов 1601. Ответов 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,701
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,701
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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru