|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
Стандартные библиотеки ввода/вывода20.08.2013, 11:01. Показов 8524. Ответов 13
Метки нет (Все метки)
Здорова господа!
Есть задание: "Нужно реализовать стандартную библиотеку ввода/вывода языка Си <stdio.h> используя <iostream> и наоборот реализовать <iostream> используя <stdio.h>, и еще они должны одновременно работать." Я даже незнаю с чего и начать? Наверно с stdio.h начну, но там штук 30 функций. хз мб штук 10 реализую. stdio.h еще куда нешло там вроде просто набор функций, а от iostream тут уже посложнее, тут нужно как то спроэктировать весь набор классов зависимости. ios класс создать. Я так думаю сомому iostream создать это очень трудоемкий процесс, хотя мб просто спроэктировать и теоретически разобрать структуру, где что будет. Мб кто уже решал????
0
|
|
| 20.08.2013, 11:01 | |
|
Ответы с готовыми решениями:
13
Стандартные функции ввода/вывода языка Си Библиотеки ввода вывода. Какой препроцессор используется для подключения стандартной библиотеки ввода-вывода? |
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 20.08.2013, 11:28 | |
|
ninja2, Читаем стандарт - вникаем в суть - делаем примерно так же.
1
|
|
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
| 20.08.2013, 21:25 [ТС] | |
|
А чем можно заменить функцию из <stdio.h> remove(имя_файла) - удаляет файл и rename(имя файла, новое имя файла). Чото я подобных функций из <iostream> не припомню.
Добавлено через 12 минут И printf и fprintf тоже переопределить не так просто, забыл какую библиотеку подключить для разного количества аргументов. Я вообще сделал FILE как fstream, короче typedef применил : typedef fstream File . Вроде как это дескриптор потока и через него уже ввожу или вывожу в файл, а через cin и cout считываю вывожу в поток ввода вывода.
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 20.08.2013, 21:38 | |
|
ninja2, remove/rename в STL действительно нет.
А printf/fprintf относительно просто. Для удобной работы с переменным кол-вом параметров - cstdarg.
1
|
|
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
| 21.08.2013, 01:21 [ТС] | |
|
Короче mystdio.h кое как написал, функций 15 переопределил, не сильно сложное задание, а от с <iostream> тут уже потруднее. Я вообще заглянул в эту библиотеку, там всего 4 объекта (не берем с w) cout,cin,clog,cerr. cout - это объект ostream, cin - объект istream, cerr - тоже объект ostream и clog - ostream.
Давайте разберемся чем отличаются cout, cerr и clog. cout использует буферизацию , cerr сразу выводит ошибку без буфера, ну это я так думаю, просто использовал cerr и cout так cerr сразу выводило ошибку а cout вроде не выводило. А clog я вообще вроде не использовал или мб не помню,хз. зачем он нужен? Теперь поговорим о самой иерархии классов. Из <iostream> видно что он использует объекты двух классов istream и iostream, значит нам нужно построить всего лишь два этих класса. Я так глянул вроде базовый класс идет ios_base затем ios а уже от ios идут iostream и ostream, ну в принципе логично ios это состояние input output state переводится как состояние выходного входного потока. Походу нужно создать всего 4 класса ios_base ios istream и ostream? От еще что не понятно допустим создал я эти классы и как же я сделаю ostream cerr который будет выводить данные в поток сразу, а ostream cout не сразу, а использовать видимо буфер???
0
|
|
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 21.08.2013, 01:34 | |
|
ninja2, cout - вывод в stdout.
cerr - вывод в stderr, небуферизованный. clog - вывод в stderr. Почитайте стандарт, реально, там все несколько сложнее, чем вы описываете.
0
|
|
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||
| 21.08.2013, 01:44 [ТС] | ||
|
Вроде догадался, наверно ostream нужно делать в виде шаблона с параметрами по умолчанию stdout, и когда будем создавать объект cerr, то переопределить параметр под stderr. Еще пока не сильно понятно как делать.
А иерархию классов правильно ж определил? Отут от вроде так как я написал для iostrem http://www.cplusplus.com/refer... m/istream/ и для ostream http://www.cplusplus.com/refer... m/ostream/ ?????
0
|
||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
|
| 21.08.2013, 08:41 | |
|
ninja2, Нет. Почитайте же. http://en.cppreference.com/w/cpp/io/cout http://en.cppreference.com/w/cpp/io/cerr. ostream работает с streambuf*, streambuf - базовый класс для всех работ с буфером и т.д. http://en.cppreference.com/w/c... _streambuf
1
|
|
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||||||||||||
| 21.08.2013, 13:27 [ТС] | ||||||||||||
|
В ios есть функции для работы с буфером ios::rdbuf() которая возвращает указатель на streambuf* , видимо в самом классе ios должно быть typedef char* streambuf, но на самом деле:
Значит нету typedef char* streambuf; Не понятно как оно там на самом деле, но буфер должна быть обычная строка типа char* которая допустим содержится в ios, потому что там собраны функции для работы с буфером, а streambuf это класс для обработки этой строки, это так представляется. Еще пробовал вывести буфер:
Не знаю как оно там взаимодействует но буфер это строка, например в классе ios должен быть указатель на char* buff; На самом деле в реальной стл там указатель на streambuf* buf; что то такое и streambuf это не typedef char streambuf, а класс внутреннее представление которого указатель на char* и он просто предоставляет интерфейс для работы с этой строкой (так сказать буфером), и еще в streambuf похоже нету конструктора преобразования для char* и оператора преобразования типа operator char* () потому что он просто в поток не выводится. Это видно из поведения streambfu, мб и ошибаюсь. Мы что бы не делать левый класс streambuf упростим себе задачу буфер представим в виде typedef char* streambuf; Да и что то я сомневаюсь что то что я выше написал соответствует действительности, потому что на схеме взаимодействия классов по ссылке выше почему то нету стрелочки от ios к streambuf, которая показывала что класс ios имеет класс streambaf,хотя rdbuf возвращает указатель на streambuf значит стрелочка должна быть?
0
|
||||||||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||
| 21.08.2013, 14:30 | ||
|
ninja2, <iostream> он как бэ большой. streambuf не является левым классом, отнюдь. И тем более он не является typedef-ом на char. basic_streambuf - это шаблонный класс, который делает всю относительно низкоуровневую работу. В basic_ios хранится указатель на basic_streambuf, который в свою очередь является интерфейсом - практически все public функции вызывают защищенные виртуальные функции.
1
|
||
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
||||||
| 21.08.2013, 14:43 [ТС] | ||||||
|
ForEveR, Сложное задание, да не сделаю я его с буфером похоже. Даже если я готовый streambuf добавлю в класс ios_base я не сильно понимаю как его использовать например в этом классе:
Для меня это задание похоже тяжелое. Добавлено через 1 минуту Да сделаю кое как на троечку, тройка тоже положительная оценка .
0
|
||||||
|
В астрале
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
|
||||||
| 21.08.2013, 14:45 | ||||||
|
ninja2, Как это сделано в gcc -
1
|
||||||
|
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
|
|
| 21.08.2013, 15:22 [ТС] | |
|
Да пропущу это задание, там в стл один файл istream только 1к строк, а еще и остальные. Теоретически просто подумаю над тем как бы ее можно было б построить и структуру определю примерную да и все.
0
|
|
| 21.08.2013, 15:22 | |
|
Помогаю со студенческими работами здесь
14
Стандартные библиотеки Стандартные библиотеки с++ стандартные функции библиотеки <string.h>
Visual Studio не подключаются стандартные библиотеки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
|
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|