0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 25
|
|
1 | |
Файловый ввод/вывод09.02.2011, 17:43. Показов 8235. Ответов 15
Метки нет (Все метки)
Ребят, не могу никак понять файловый ввод вывод текстовой информации в с++. Знаю сто открытие через fopen, а как создать сам текстовый файл в самой с++, а потом его считать?
0
|
09.02.2011, 17:43 | |
Ответы с готовыми решениями:
15
Заменить в программе, переводящую строку в двоичный код, консольный ввод/вывод на файловый ввод/вывод Поменять консольный ввод-вывод на файловый ввод-вывод Файловый ввод-вывод, ввод с клавиатуры и обработка массива структур Реализовать вывод массива объектов типа Student на консоль (файловый ввод/вывод) |
09.02.2011, 18:24 | 2 | ||||||||||||||||||||||||||||||||
Давайте определимся, что вы хотите: C или C++. fopen() - это функция C. Прототип выглядит так:
mode - режим. Выглядит как C-строка (массив char с нуль-терминатором в конце). Может иметь значения:
Чтение в стиле C:
Запись в стиле C:
Обе функции возвращают количество записанных данных. Вот пример программы (используя вызовы C):
Но если вы хотите C++, используйте потоки файлового вывода-вывода (ifstream - ввод, ofstream - вывод, fstream - ввод и вывод). Подробнее тут: Чем отличается fstream от ofstream? Удачи.
2
|
7 / 7 / 2
Регистрация: 20.01.2011
Сообщений: 73
|
|
09.02.2011, 23:03 | 3 |
Хорошо написал. Спасибо.
0
|
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
||||||
11.02.2011, 04:01 | 4 | |||||
Подниму тему, дабы не плодить.
Разбираюсь в потоках. Объясните пожалуйста, что не так в фукции read()? write() пишет в файл все на ура. По крайней мере, размер файла соответствует тому, сколько объектов в него записано. А вот чтение не проходит. Прям беда. Притом ошибка происходит уже после выполнения if(inFile.eof()) код, собственно:
0
|
11.02.2011, 11:36 | 5 | |||||
Так работает:
1
|
2 / 2 / 1
Регистрация: 02.11.2010
Сообщений: 78
|
|
11.02.2011, 11:59 | 6 |
присоединяюсь.
Файлы ещё не проходил, поэтому сразу сохранил себе этот пост
0
|
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
|
11.02.2011, 15:07 | 7 |
Спасибо большое! Почерпнул новой информации от Вас.
Но вот, крутил-крутил головой. В методе read(), фактически, ничего не поменялось, кроме дополнительного метода при чтении. (отдельное спасибо за него.) Почему же работает тогда? Я имею в виду, что такого поменялось, что код непосредственно чтения не изменился, но стал работать?
0
|
11.02.2011, 15:13 | 8 | |||||
Да, собственно, ничего. Вы писали:
0
|
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
|
11.02.2011, 15:23 | 9 |
В общем я так понял, чтобы наверняка, нужно для начала вычислить (если файлу открывается уже после нового запуска программы, что обнуляет count), сколько объектов класса записано в файл. И делать цикл i<count
Иначе ничего не получается.
1
|
11.02.2011, 15:30 | 10 |
Да, так и нужно делать. Но не то, чтобы не получится... Понимаете, если вы например выделили память под массив из 5 int'ов - это 5 * 4 = 20 байт:
00 00 00 00 | 00 00 00 00 | 00 00 00 00 | 00 00 00 00 | 00 00 00 00 И начали их читать, но прочитали 6 int'ов: 00 00 00 40 | 00 00 80 1A | 7F FF FF FF | F0 00 0A 13 | DE AD BE EF | 00 00 40 0D Вы вылезете за пределы массива. Компилятор вам ничего не скажет. Вы либо схватите ошибку сегментации памяти - SEGFAULT, либо затрёте какую-то информацию, которая была на месте 5'го int'а. Поэтому нужно точно знать, сколько байт вам нужно.
1
|
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
||||||
11.02.2011, 16:00 | 11 | |||||
В общем, я даже не знаю что делать.
1 - записываю три объекта в файл. Каждый объект занимает 8 байт (4 инт, 4 флоат) 2 - на выходе получаю файл размером 24 байта. 3 - при чтении, проверяю, сколько объектов записано в файл и считываю их в цикле.
0
|
11.02.2011, 16:04 | 12 | |||||
Ну правильно. Зачем-то после цикла считывания вы проверяете
0
|
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
||||||
11.02.2011, 16:10 | 13 | |||||
Да, убрал, сразу же после того как написал. Считывание проходит, но забивается все нулями. Сразу ясно, что в целом что-то не то. Наверняка я ошибся много ранее, раз такое происходит.
В общем, вот весь код программы:
0
|
11.02.2011, 16:45 | 14 | ||||||||||
Зачем в class Distance ваше Distance* arrap[]; ? Вы в объекте типа Distance храните указатели на объекты типа Distance, которые хранят указатели на объекты типа Distance, которые хранят указатели на объекты типа Distance, которые хранят указатели на объекты типа Distance... Чего вы пытаетесь этим добиться?
Добавлено через 7 минут Я бы сделал так:
А ещё лучше как-то так:
1
|
23 / 20 / 3
Регистрация: 12.08.2010
Сообщений: 206
|
|
11.02.2011, 17:01 | 15 |
Спасибо.
В Ваших случаях, для меня, пока-что много пробелов.
0
|
0 / 0 / 0
Регистрация: 09.02.2011
Сообщений: 25
|
|
13.02.2011, 03:42 [ТС] | 16 |
Ребят, всем большое спасибо)))))))))))))
0
|
13.02.2011, 03:42 | |
13.02.2011, 03:42 | |
Помогаю со студенческими работами здесь
16
Поиск в массиве структур по заданному полю и вывод в алфавитном порядке (файловый ввод/вывод) Вывод суммы в файл (файловый ввод/вывод) файловый ввод/вывод Файловый ввод/ вывод Файловый ввод/вывод Файловый ввод вывод Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |