manya строки должны заканчиваться 0, у тебя этого нет, в конце циклов нужно persons[i].name[j] = 0. И по хорошему так как эти циклы одинаковы то нужно выделить функцию, а еще лучше заменить на scanf...
при выводе в файл, нужно добавить разделитель, иначе все сольется fprintf(f_out,"%s\n",persons[j].name); fprintf(f_out,"%s\n",persons[j].sirname);
и это все можно заменить вызовом одной функции:
Код:
fprintf(f_out,"%s\n%s\n%d\n", persons[j].name, persons[j].sirname, persons[j].phone); //и т.д. остальные поля записать
fwrite используется для записи (как правило) в бинарном виде, т.е. нужно файл открыть "wb", и писать так:
fwrite(&persons[i], sizeof(phonebook), 1, f_out);
а еще лучше заменить одной функцией, без цикла:
fwrite(persons, sizeof(phonebook), count, f_out);
важная тонкость: структуру нужно определить с заданным выравниванием, на разных машинах и компиляторах выравнивание по умолчанию может быть разным и поэтому файл записанный программой скомпилированной с одними настройками может не прочитаться программой скомпилированной с другими.
Код:
#pragma pack(push) #pragma pack(1) struct phonebook { long phone; char name[N]; char sirname[N]; int length_1; int length_2; int year_birth; int month_birth; int day_birth; }; #pragma pack(pop)
тут задано выравнивание в 1 байт (т.е. в памяти будет все плотно лежать)
Advanced member
Статус: Не в сети Регистрация: 30.08.2003 Откуда: Санкт-Петербург
manya нахаляву не получится... Или Вы берете в свои руки ввод и вывод, либо полагаетесь на библиотеку компилятора, которая делает все: создание окон, убиение окон и пр. И, да, кстати, DOS-приложение и Win32-консольное приложение - две большие разницы (с)
_________________ {:€ дед в законе :-) нородный окодемег почетный пользователь OpenSuSE 11.3 Ремонт и модернизация ноутбуков IBM (Lenovo) ThinkPad
Код конечно потеряет переносимость, в unix не пойдет там самого понятия консольное окно нет, хотя там можно закрыть терминал , если он тебе не нужен (так делаются "демоны" - программы работающие в фоновом режиме и не привязанные к пользователю).
Member
Статус: Не в сети Регистрация: 10.12.2007 Откуда: Санкт-Петербург
здравствуйте, товариСчи) При написании архиватора по алгоритму Хаффмана возникла проблема... С кодированием все круто, а вот с раскодированием..... Есть двоичное дерево, необходимо записать его в файл, а потом восстановить.
Код:
struct sym { sym *left; sym *right; };
Про то, как это делать теоретически, я знаю Но практически...... Как бы сие реализовать? ЗЫ гугл не помог
_________________ Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах... DCN - наше все
вариант 1. нужно обойти дерево и сохранить полезные данные узлов, а при загрузке строить дерево заново, по тому же алгоритму по которому это дерево было постоено.
вариант 2. у варианта 1 есть недостаток, алгоритм постоения дерева может быть тяжелым и загрузка файла будет медленная. Поэтому можно сделать по другому. Сохранять в файл не только данные, но и признаки к какому узлу подсоединять этот узел, и куда (в лево или в право). Но тут тоже может быть непросто, если дерево большое.
вариант 3. можно хранить все узлы в массиве, и в узлах указатели на левый/правый листы заменить на индексы в этом массиве. Т.е. типа такого:
struct Node { Data data;//какие то полезные данные unsigned index_left; unsigned index_rigth; };
Node pool[MAX_NUM_NODE]; // массив где будет храниться дерево unsigned num_nodes = 0; //количество узлов реально сохраненных в пуле
тогда сохранение и загрузка, будет элементарной, просто сохраняешь/читаешь num_nodes и массив
Прошу помочь, я использую компилятор Borland C++ 3.1, и когда я ставлю курсор, чтобы писать код - то символы, которые стоят ПЕРЕД курсором меняются на те, что я набираю, а как сделать, чтобы не заменялись, а вставлялись.
Member
Статус: Не в сети Регистрация: 10.12.2007 Откуда: Санкт-Петербург
всем добрый вечер. В общем есть проблема. Есть некоторый массив char из 0 и 1: 100110010010111011010100110001101111100.......Нужно упаковать биты в байты по 8 шт и записать в файл. Как это сделать?( я не про запись в файл )
_________________ Семь бед, один Reset. 95, 98 - это количество багов. В пpоцентах... DCN - наше все
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения