72 / 71 / 8
Регистрация: 04.08.2010
Сообщений: 434
|
||||||||||||||||
1 | ||||||||||||||||
Решить упражнение на файловый ввод/вывод из книги Лафоре (12 глава)08.12.2010, 18:59. Показов 8200. Ответов 40
Метки нет (Все метки)
Доброго времени суток.
В очередной раз обращаюсь за советом касательно разъяснения задачи Как полностью считать в
Вот решенная задача которую нужно переделать\ (в ней вроде бы все просто)
И немного хотелось бы разьяснения понятия файловый поток с физической точки зрения. Как я понимаю - это как бы "мост" между файлом и пользователем Добавлено через 52 минуты Товарищи Гуру. хотелось бы услышать хоть намек, куда смотреть) Добавлено через 3 часа 41 минуту Апну на правах важности темы)
1
|
08.12.2010, 18:59 | |
Ответы с готовыми решениями:
40
Зацикливание программы. В чем же ошибка? ( Упражнение 5 Глава 7 Лафоре ООП C++) Упражнение из книги Лафоре Упражнение №8 глава 5 из книги Страуструпа Работа с Классами или разбираем 10 Упражнение 6 главы книги ООП в С++ Р.Лафоре |
1 / 7 / 3
Регистрация: 06.04.2011
Сообщений: 85
|
|
13.10.2011, 06:24 | 2 |
Похоже что тема мертва попробуем ее оживить! Я тоже сейчас читаю Лафора и не могу решить это задание, хотел уже создавать новую тему, но нашел эту через поиск.
0
|
Заблокирован
|
|
13.10.2011, 07:07 | 3 |
Если бы было задание: нужно написать такой то и такой то класс...
У вас же можно только эврестически догадываться о том, что требуется сделать. Конкретизируйте задачу. Вы создаете десять объектов. Потом каждый поочередно сохраняете на диске. Теперь у вас есть файл данных для 10ти объектов. Вы создаете объект - он автоматически берёт свои данные с диска (каретка данных в файле перемещается на следущую запись) поскольку файл не закрывается - данные о каретке сохраняются. Теперь вы создаете 2й объект - и он как и первый инициализируется данными из файла по текущей каретке. Получается, что вы можете сохранять состояния объектов. А потому в другой момент времени заного создавать объекты, каждый из которых автоматически проинициализируется данными сохраненными в прошлый сеанс работы
0
|
1 / 7 / 3
Регистрация: 06.04.2011
Сообщений: 85
|
|
13.10.2011, 20:45 | 4 |
В общем меня только интересует как записывать и загружать данные с файла не закрывая его? Я пробовал записывать только поля и загружать данные тоже только в них потом делал вывод и загружал следующие данные с файла. Но из за того что я не закрывал файл вывод странно себя ведет или выводит 2 раза последнее поле или после одного вывода на экран снова повторить вывод не получается, файловый указатель вообще не понятно как себя ведет в такой ситуации, я сбрасываю его на 0 перед выводом но потом потом он становиться -1 и не хочет заново устанавливаться на 0.
0
|
Заблокирован
|
||||||
13.10.2011, 20:57 | 5 | |||||
Например - просто тупо не закрывать файл:
Если ему не делать close() то он и закрываться не будит. Он закроется автоматически в деструкторе при завершении работы всего приложения. Таким образом, каждый вновь созданный объект запускает статик-метод, и заполняет себя данными. Внутри этого статитка живёт фстрим, который не уничтожается и не закрывается по завершении статик метода, и поэтому сохраняет актуальную позицию каретки
0
|
1 / 7 / 3
Регистрация: 06.04.2011
Сообщений: 85
|
||||||
13.10.2011, 21:50 | 6 | |||||
У меня такой простой вариант, вывод все равно происходит один раз, второй раз снова вывести не получается данные, надо закрывать программу и снова потом надо ее запускать чтобы вывести данные из файла
Help please
0
|
Заблокирован
|
|
13.10.2011, 21:52 | 7 |
Sylvos мне вам хочется сразу сказать одну вещь: Ваш код плохо читается.
Вы запихали в класс все - все методы, и реализации. Сделайте в объявлении класса только прототипы, и комментарии объясняющие что эти прототипы должны делать. А реализацию ниже. Тогда уже можно будит нормально посмотреть, подумать, что там не так.
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
13.10.2011, 22:30 | 8 |
Sylvos, напиши что ты вводишь (если вводишь) с консоли что видишь и что хочешь увидеть
0
|
1 / 7 / 3
Регистрация: 06.04.2011
Сообщений: 85
|
||||||
13.10.2011, 22:39 | 9 | |||||
0
|
23 / 23 / 4
Регистрация: 05.11.2010
Сообщений: 134
|
|
13.10.2011, 22:43 | 10 |
Простите. Опоздали
0
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
|
|
13.10.2011, 22:44 | 11 |
А чё такое OMG и WTF?
Не по теме: Сёдня не гляну, завтра гляну, щас спать
0
|
1 / 7 / 3
Регистрация: 06.04.2011
Сообщений: 85
|
|
13.10.2011, 23:03 | 12 |
Не по теме: OMG — аббревиатура Oh My God! (рус. О, Боже мой!) — общеупотребительное сокращение-англицизм при текстовом общении.
0
|
Заблокирован
|
|
13.10.2011, 23:14 | 13 |
Sylvos, слишком много коментариев тоже не нужно))
комментарии должны пояснять что делает данный метод (либо данный алгоритм) Не нужно комментировать одно и тоже дважды, и не нужно комментировать совсем очивидные вещи. Любому программисту с++ будит понятно что Name(); это конструктор Теперь второй момент: у вас есть класс, который называется Name. То есть, это класс имен. Какую задачу выполняет класс имен? Судя по коду - создание анкет, и управление этими анкетами. Допустим - отобразить все анкеты в консоли. Вам не кажется, что имя класса Name не отражает сути той задачи, которую решает класс? Назовите тогда его уже CManagerListPerson - менеджер анкет И тогда вы сразу заметите, что сама по себе логика вашего менеджера и задача заявленная по сабжу - совершенно в разных плоскостях существуют. То есть ваш класс решает совсем не ту задачу, которую задал преподаватель. Задача по сабжу - создать такой класс, объекты которого могли бы анициализировать себя данными автоматически, подкачивая их с диска. Там не было задачи, что бы эти объекты при этом являлись менеджерами этой самой базы данных, откуда они будут брать данные (или я сам в корне не верно истолковал сабж)
0
|
23 / 23 / 4
Регистрация: 05.11.2010
Сообщений: 134
|
|||||||||||
13.10.2011, 23:20 | 14 | ||||||||||
Сделайте ещё контроль ввода данных!
А то если номер телефона вводишь не цифры, а буквы, то код просто поднимет бурю строк с ошибками. Например:
0
|
1 / 7 / 3
Регистрация: 06.04.2011
Сообщений: 85
|
|
13.10.2011, 23:33 | 15 |
Ребята это не экзаменационное задание! Это упражнения для самопроверки из 12 главы "Потоки и файлы" книги "Объектно-ориентированное программирование в C++." 4 издание автора Лафоре Р. Я стараюсь делать все задания из этой книги но уже 2 +1 пропустил. Наверно я сам не правильно понял что нужно сделать в задание. Зачем нужен статический указатель на файл в классе? И почему файл который создается в бинарном режиме можно открыть обычным блокнотом я думал что там должно быть что то типа машинyого кода "‰Ў‡ЄЄъ8¶H" И как правильно записывать и читать данные с него ?
0
|
23 / 23 / 4
Регистрация: 05.11.2010
Сообщений: 134
|
|
13.10.2011, 23:41 | 16 |
У меня пока что нет такой практики, чтобы ответить на все вопросы. Главное - нужно понять алгоритм действий, а остальное придёт с опытом. Я тоже новичок и тоже читаю ту же книгу. Правда пока что тяжело сообразить что с нуля, но стараюсь определять в кодах ошибки. Москва не сразу строилась
0
|
Заблокирован
|
|
14.10.2011, 00:07 | 17 |
Тут нужно понять идею! Смотрите:
Представьте себе карету, которую везут упряжка из трех лошадок. Каждая лошадка - это экземпляр класса. Каждая лошадка может иметь свой цвет, возраст, и скорость передвижения. Но поскольку все лошадки в одной упряжке, то параметр "скорость" у них у всех одинаковый. Получается, что нет никакого смысла каждой лошадке помнить одно и тоже число. Нет смысла каждой лошадке помнить свою скорость. Ну так вот, статический элемент данных класса - это и есть поле, общее для всех объектов данного класса. То есть, возвраст и цвет у каждой лошадке свой уникальный. А скорость у всех - общая. Одинаковая. Всегда, когда вам захочется сделать для всех объектов класса какое то поле общим - вы делаете его статиком Добавлено через 7 минут Бинарный режим - это просто последовательность байтов. И ничего более. Можно записать в файл символы и строки, и читать так же. А можно записывать в файл последовательности байтов, и читать так же. Структура в памяти компьютера - это просто некоторая область памяти, которая имеет определенный размер. Вместо того, что бы записывать в файл строки и символы, можно открыть файл в бинарном режиме, и сразу закинуть туда всю структуру целиком - все что имелось в данный момент по адресу начала структуры окажется в файле
2
|
448 / 211 / 21
Регистрация: 07.10.2011
Сообщений: 462
|
|
14.10.2011, 00:07 | 18 |
Сообщение было отмечено как решение
Решение
Добавь в функцию Load() первой строкой строку
file.clear(); Дело в том, что после первой попытки вывода ты достиг конца файла и соответствующий флаг установился в 1. Поэтому все последующие проверки while(!file.eof()) не проходили, следовательно. из файла просто ничего не читалось, потому что флажок eof говорил твоему потоку, что конец файла уже достигнут. Метод clear() чистит эти флажки, поэтому теперь повторный вывод из файла будет возможен
3
|
Заблокирован
|
|
14.10.2011, 00:14 | 19 |
Да. Вы правильно понимаете.
Главное понять: файловый поток - это средство доставки данных от пользователя к самому файлу. А файл - это не обязательно текстовый документ, это может быть что угодно, что умеет получать/отправлять данные. Например, принтер, или даже окошко виндовс.
1
|
kazak
|
14.10.2011, 00:16
Решить упражнение на файловый ввод/вывод из книги Лафоре (12 глава)
#20
|
Не по теме: aeshes, ну хоть кто-то догадался:)
0
|
14.10.2011, 00:16 | |
Упражнение по программированию (Стивен Прата, глава 2, упражнение 3) Упражнение из Лафоре. Тема Перечисления. Как правильно сделать вывод? Решить задачу на файловый ввод/вывод (игра "Города") Заменить в программе, переводящую строку в двоичный код, консольный ввод/вывод на файловый ввод/вывод Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |