1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
получается нужна полная функция...хорошо,так и сделаем...
дело в том,что в задании у меня сказано,что нужно дописать результаты в конец файла. только вот действительно нет смысла в этом.ведь потом когда я допустим буду выводить содержимое файла на экран,будет выводится всё скопом,что не есть хорошо. мне кажется ,что всё же стоит очищать файл и писать туда эл-ты структуры,соответствующие критерию. правда,я не знаю как это делается
перед сортировкой... Но тогда у тебя совершенно пропадает смысл вообще записывать ВСЕ данные в файл. Они, конечно, будут записаны, только тут же удалятся, и перепишутся отфильтрованными данными. Лучше просто читай изначально в массив (без
write(bin,notebook[i]);
), а уже то, что подходит под критерий записывай в файл...
решила я всё-таки не стирать ничего из файла. а при выводе когда i=кол-ву изначальных записей,выводить слово result, а потом отсортированную инф-ию. НО на экран у меня выводится полный бред=(куча ноликов...а того,что нужно нет. что же делать?
#include <iostream.h> #include <fstream.h>
typedef struct tagT { int disp_res_x; int disp_res_y;
Да что же тебя так тянет КАЖДЫЙ РАЗ менять что-то кардинально в программе??? Формат вывода зачем изменила? Чего теперь удивляешься, что одни циферки? Ты ж их и выводишь!!! Вот раньше был нормальный вывод...
Зачем тебе понадобилось добавить template <class T> перед описанием функции write? Чтоб программа перестала соответствовать Стандарту? Убери это... Вот так должен выглядеть заголовок write:
iostream& write(iostream &io, const T ¬ebook) { ... }
Чтобы теперь программа компилировалась, нужно убрать строку
cout << "Number of notes:";cin >> n; // write(bin,n); // <--- Вот эту
(запись размера происходит автоматически при вызове write)
А чтобы программа стала работать правильно -
streampos mark = bin.tellg(); // Запоминаем позицию, в которой находились ДО фильтрации bin.seekg(2, ios::beg); for (int i=0;i<n;i++) // Фильтруем файл { if (notebook[i].f>120) write(bin,notebook[i]); }
// И восстанавливаем ту позицию, которую сохранили... Теперь // будут читаться только данные, удовлетворяющие твоему условию... bin.seekg(mark, ios::beg);