Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.91/22: Рейтинг темы: голосов - 22, средняя оценка - 4.91
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041

Система ввода/вывода

17.08.2013, 15:18. Показов 5812. Ответов 60
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здорова!

Есть задачка: "Напишите миниатюрную систему потокового ввода/вывода, предоставляющую классы istream, ostream, ifstream, ofstream, функции operator<<() и operator>>() для целых чисел и такие операции, как open() и close(), для файлов."

не знаю даже счего ее начать делать мб просто из них вызвать реальные std::istream ???
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.08.2013, 15:18
Ответы с готовыми решениями:

Система ввода/вывода файлов
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main() { double S,d; S = 0; ifstream...

Система ввода/вывода файлов
{ setlocale(LC_ALL, &quot;rus&quot;); int P, S,d; P = 1; S = 0; FILE*fp = fopen(&quot;123.txt&quot;, &quot;r&quot;); while(!feof(fp)) { d = fgetc(fp); ...

Библиотеки ввода вывода.
Доброе утро! Есть задача: Дан файл с текстом. Проверить, сколько раз в тексте встречается какой-либо отрезок ряда 0123456789 длины не...

60
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
17.08.2013, 20:26  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Croessmah Посмотреть сообщение
Ну согласитесь - работать с тем же вектором намного легче, если знаешь хотя бы примерно принцип его устройства. А когда без знаний просто суешься, то получаешь то не выделенную память, то не понятные копирования, то инвалидацию итераторов и т.д.
Да оно то мб и хорошо, а времени на его написание скоко затрачивается? Я первый раз когда его в Дейтелах не писал, а просто набрал было тяжело разобраться. А потом сам уже написал, раза три, так первый раз тяжело было, а щас бы быстро написал бы без проблем, наверно всетаки скил повышается, просто незаметно.
0
17 / 15 / 0
Регистрация: 05.07.2013
Сообщений: 27
17.08.2013, 20:29
Цитата Сообщение от ninja2 Посмотреть сообщение
Кстати в главе "как учить С++" хорошо объясняется что и как учить, там говорится что не сильно стоит заморачиватся на синтаксисе, это я так понял, языка, а нужно принципы изучать. Там все смутно написано.

Не по теме:

Вы уж определитесь, что ли..

0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
17.08.2013, 20:32  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
Тема про вектор от тебя была где-то... Месяца три-четыре назад. Да, за это время обязано было случиться просветление, я ума не приложу что пошло не так.
Да вектор я понял, меня от шаблоны опустили. Шаблоны тяжело было строить typedef использовать и всю фигню. Iterator свой было тяжело строить, да эти шаблоны не сильно разобрал, шаблоны тяжелая тема. Forever я с него порожался как он шарит шаблоны хорошо.

Добавлено через 3 минуты
Цитата Сообщение от Discoverer Посмотреть сообщение
Не по теме:
Вы уж определитесь, что ли..
Что написано смысл понял, практиковать, практиковать, чем больше занимаешься тем больше шариш. время затраченное на обучение прямо пропорционально знаниям и навыкам. Там это было написано. И что за один день фиг его выучишь. И что знания должны устаканится, короче время должно пройти что бы знания усвоились. Интересно он пишет на трех листах. Тут бывает спрашивают новички как С++ учить как учить.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
17.08.2013, 23:47
Цитата Сообщение от 0x10 Посмотреть сообщение
Смысл переписывания stl как раз в том, чтобы не использовать stl. Можно использовать сишные функции или системное api, по вкусу.
Если делать эту задачу с целью понять, как устроено это в STL придется делать очень много, т.к. система ввода/вывода в С++ довольно запутанная, честно говоря.
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
20.08.2013, 09:55  [ТС]
Цитата Сообщение от ForEveR Посмотреть сообщение
Если делать эту задачу с целью понять, как устроено это в STL придется делать очень много, т.к. система ввода/вывода в С++ довольно запутанная, честно говоря.
Я думаю просто сделать мб не так как в СТЛ, просто создам 4 класса: ifstream и ofstream для работы с файловыми потоками, istreram и ostream для работы просто с потоками ввода вывода. И функции 4 которые просят сделаю, давалю еще там для примера пару функций, не все, в каждый класс что бы было понятно как остальные добавлять.
Если делать все так как в СТЛ с basic_i(o)stream ами и со всеми функциями, то времени затратиться много.

Добавлено через 48 минут
От два класса создал, токо оно как то неправильно работает без остановки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <stdio.h>
 
class istream
{
public:
    //конструктор
    istream(){}
    char get(){return getc(stdin);}
    istream& operator>>(char* s){gets(s);return *this;}
    istream& operator>>(char c){c=getc(stdin);return *this;}
};
 
class ostream
{
public:
    ostream(){}
    ostream& operator<<(char* s){puts(s);return *this;}
    ostream& operator<<(char c){putc(c,stdout);return *this;}
};
 
int main()
{
    istream is;
    ostream os;
    char c;
    os <<"Vvedite cimvol ... ";
    c=is.get();
    os <<"c= "<<c<<"\n";
 
    char string[256];
    os <<"Vvedite string ... ";
    is >>string;//считываем в string.
    os <<"string= "<<string<<'\n';
 
    return 0;
}
Остановки нету что бы ввести строку???

Добавлено через 4 минуты
Исправил надо scanf и printf использовать и для файлов наверно fscanf и fprintf щас попробую.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.08.2013, 09:55
Наверное так нужно сделать:
C++
1
2
c=is.get();
getchar(); // или что-то для извлечения '\n' из потока
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
20.08.2013, 10:35  [ТС]
Все сделал быстро, там в задании написано что часов 10 на это задание нужно потратить, а я его за какой то час сделал, ну как никак скил прокачан про.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <stdio.h>
 
class istream
{
public:
    //конструктор
    istream(){}
    char get(){return getc(stdin);}
    istream& operator>>(char* s){scanf("%s",s);return *this;}
    istream& operator>>(char c){scanf("%c",c);return *this;}
};
 
class ostream
{
public:
    ostream(){}
    ostream& operator<<(char* s){printf("%s",s);return *this;}
    ostream& operator<<(char c){printf("%c",c);return *this;}
};
 
class ifstream
{
    FILE* pF;
public:
    void open(char* s,char* s1="w")
    {
        pF=fopen((const char*)s,s1);
    }
 
    void close(){fclose(pF);}
    
    ifstream& operator>>(char c){fprintf(pF,"%c",c);return *this;}
    ifstream& operator>>(char* s){fprintf(pF,"%s",s);return *this;}
};
 
class ofstream
{
    FILE* pF;
public:
    void open(char* s,char* s1="r")
    {
        pF=fopen((const char*)s,s1);
    }
    void close(){fclose(pF);}
    ofstream& operator<<(char c){fscanf(pF,"%c",c);return *this;}
    ofstream& operator<<(char* s){fscanf(pF,"%s",s);return *this;}
};
 
int main()
{
    istream is;
    ostream os;
    char c;
    os <<"Vvedite cimvol ... ";
    c=is.get();
    os <<"c= "<<c<<"\n";
 
    char string[256];
    os <<"Vvedite string ... ";
    is >>string;//считываем в string.
    os <<"string= "<<string<<'\n';
 
    //test file
    ifstream iff;
    iff.open("myfile.txt");
    
    char k='k';
    iff >>k;
    iff >>"c= ">>k>>'\n'>>"hellow world gacpada\n";
    iff.close();
 
    ofstream off;
    off.open("myfile.txt");
    off <<string;
    os <<"string= "<<string<<'\n';//считаем строчку с символа
    off.close();
 
    return 0;
}
0
20.08.2013, 10:41

Не по теме:

Цитата Сообщение от ninja2 Посмотреть сообщение
ну как никак скил прокачан про.
Да верим, верим. Необязательно писать о Вашем супер скилле и профессионально написанном коде в каждом сообщении

2
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
20.08.2013, 10:42  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Да верим, верим. Необязательно писать о Вашем супер скилле и профессионально написанном коде в каждом сообщении
Ок буду поскромнее .
0
17 / 15 / 0
Регистрация: 05.07.2013
Сообщений: 27
20.08.2013, 10:49
Цитата Сообщение от ninja2 Посмотреть сообщение
а я его за какой то час сделал, ну как никак скил прокачан про
Угу, сразу видна рука гуру. Зачем конструкторы-деструкторы в классе? Действительно, зачем; пользователь сам должен вызывать функции для открытия/закрытия файлов. А главное, пользователь данного класса не будет рассчитывать на то, что в деструкторе файл будет закрыт. И сам его закроет.
Один только вопрос к Вам, о Гуру, Вы сами бы использовали данные классы?
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
20.08.2013, 10:51  [ТС]
Цитата Сообщение от Discoverer Посмотреть сообщение
Вы сами бы использовали данные классы?
Нет использовать я буду <iostream> или <stdio.h>, это так задачка.
0
17 / 15 / 0
Регистрация: 05.07.2013
Сообщений: 27
20.08.2013, 10:56
А смысл "задачки" в том, чтобы как-нибудь за час сделать ненужные классы, которыми пользоваться нормально нельзя?
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
20.08.2013, 11:05  [ТС]
Цитата Сообщение от Discoverer Посмотреть сообщение
А смысл "задачки" в том, чтобы как-нибудь за час сделать ненужные классы, которыми пользоваться нормально нельзя?
Конечно смысл не в том чтобы создать всем нужные классы. Тут скорее всего ознакомится со стандартными классами, посмотреть их структуру, реализацию.

Добавлено через 1 минуту
Например хотябы понять и знать что каждый из классов делает.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
20.08.2013, 11:12
Цитата Сообщение от ninja2 Посмотреть сообщение
Тут скорее всего ознакомится со стандартными классами,
Ваш класс похож на стандартные только именами!
1) Где считывание в int, double, string и т.д.?
2) Где обработка ошибок при открытии файлов, считывании данных и т.д.?
3) Какого лешего я должен сам закрывать файл? А если вдруг исключение с раскруткой стека и деструктор сработает, но он бесполезен как таковой, так что теряем ресурс
4) Где разделение на бинарный и текстовый режимы?
5) Где буферизация?
6) Где ВСЁ остальное и необходимое?

Ваш класс даже, по сути, не является оберткой над Си'шными функциями, он просто дает новые названия для них и другой синтаксис использования и всё!
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.08.2013, 11:18
Croessmah,
Напишите миниатюрную систему потокового ввода/вывода, предоставляющую классы istream, ostream, ifstream, ofstream, функции operator<<() и operator>>() для целых чисел и такие операции, как open() и close(), для файлов."
1 пункт не в тему, нужно только для целых (хотя тут сделано для символов, переделать это как-то просто).
2, 3 надо бы.
А вот 4,5,6 под большим вопросом, иначе как-то с миниатирностью не заладится.
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
20.08.2013, 11:19  [ТС]
Croessmah, Так это все морочно делать я это попробую сделать когда полностью свою <iostream> делать буду Стандартные библиотеки ввода/вывода. А мб и скорее всего как попало сделаю основные функции и мб спроектирую структуру как в СТЛ да и хватит на этом, время зря неохота терять. Теоретически разберу да и все.
0
20.08.2013, 11:20

Не по теме:

Croessmah, это ж "задачка". Главное - "ознакомиться" со стандартными классами и хотя бы понять, что они делают. Ну и написать что-нибудь за час, а потом говорить, что выполнил задание и похваляться своим "про" скиллом.

0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
20.08.2013, 11:20
Цитата Сообщение от ForEveR Посмотреть сообщение
1 пункт не в тему, нужно только для целых
Я уже про
Цитата Сообщение от ninja2 Посмотреть сообщение
ознакомится со стандартными классами, посмотреть их структуру, реализацию.
Цитата Сообщение от ForEveR Посмотреть сообщение
иначе как-то с миниатирностью не заладится.
Ну миниатюрность - понятие растяжимое а так да, реализация этих пунктов ставит миниатюрность под сомнение
0
 Аватар для ninja2
979 / 196 / 33
Регистрация: 26.09.2012
Сообщений: 2,041
20.08.2013, 11:22  [ТС]
Да да да Forever прав, а вообще смысла нету полностью стл переделывать именно все, это очень трудоемкий процесс, конечно можно, но времени много уйдет, даже просто со всеми функциями ознакомится и протестировать примеры у меня неделя ушла.

Добавлено через 56 секунд
Цитата Сообщение от Croessmah Посмотреть сообщение
Я уже про
Да это провокация была, я не серьезно написал, шутя.
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
20.08.2013, 11:32
Цитата Сообщение от Croessmah Посмотреть сообщение
Где буферизация?
Ну так она в сишной библиотеке есть, значит буферазация как раз есть, при чем из коробки и автор скорее всего не догадывается об этом. Другой вопрос, что нет никакого способа сделать flush. То есть только закрывать и открывать файл заново, другого способа "бороться" с буферизацией в текущей реализации нет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.08.2013, 11:32

Потоки ввода-вывода
1) Типы данных, для которых перегружены операторы форматного ввода-вывода.

Потоки ввода-вывода в С++
Ребят, нужна помощь В программирование я новичок, но сдать нужно 1. Написать программу, печатающую символы. Использовать цикл while....

Операторы ввода вывода
Сама задача. Реализовать класс «бинарное дерево» рекурсивно реализовав в нем метод добавления элемента, а также (нерекурсивно) метод поиска...

Манипуляторы ввода/вывода.
Напишите программу которая будет просить ввести строку символов , после этого он печатает еѐ на экране 1) все буквы в нижнем...

Потоки ввода/вывода
Здравствуйте! Расскажите мне пожалуйста подробнее о всех особенностях потоков ввода/вывода; в особенности почему, когда я заполняю...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru