Консультация № 44401
27.05.2006, 15:43
0.00 руб.
0 1 1
Здравствуйте, дорогие эксперты.
Я недавно начал изучать C++ и решил написать базу данных(тел. справочник).
В моей программе не работает функция загрузки.(см. приложение)
Пожалуйста, помогите найти ошибку!
Спасибо!

Приложение:
extern phone *beg; /* указатель на первый элемент списка */extern phone *cur; /* указатель на текущий элемент списка */extern phone *prev; /* указатель на предшествующий элемент списка */extern phone *tmp; /* tmp указатель *//**************************************************************************/void load(){ FILE *f; f = fopen("__phone.lst", "r"); if (!f) { cprintf("Error. Can‘t open file __phone.lst ..."); getch(); return; } cur = beg; fprintf(f, "*==============================================================================*\\n"); fprintf(f, "* Number * Name * Address * Phone *\\n"); fprintf(f, "*==============================================================================*\\n"); if (!cur) fprintf(f, "List is empty...\\n\\r"); while (cur) { fprintf(f, "* %6d *", cur->num); /* выводим поля элементов списка */ fprintf(f, " %23s *", cur->name); /* используем форматированный вывод */ fprintf(f, " %21s *", cur->address); fprintf(f, " %17s *\\n", cur->tel); cur = cur->next; /* следующий элемент списка */ } fprintf(f, "*==============================================================================*\\n"); fprintf(f, "\\n\\r");} /**********************************************/

Обсуждение

Неизвестный
27.05.2006, 18:52
общий
это ответ
Здравствуйте, Вадик!
Если честно, то эта функция больше похожа не на функцию загрузки, а на функцию сохранения данных в поток. Почему? Потому, что ты ВЫВОДИШЬ в файловый поток свой список (fprintf), для считывания ИЗ потока нужно использовать fscanf. Также я заметил, что ты используешь не \n\r, а \\n\\r - это некорректно.
Для загрузки у тебя может возникнуть следующая проблема - тебе необходимо будет "пропускать" шапку таблицы. В случае с базой данных я рекомендую сохранять не в текстовом файле, а в двоичном (бинарном) всю структуру целиком, т.к. перемещаться по данным будет легче, единственная сложность - это нельзя будет в блокнотередактировать. Эта функция удобна для отобажения информации, на мой взгляд, а не для использования, т.к. длины строк разные получаются.
Ну и небольшой совет, если ты начал изучать С++ (а не С), то старайся использовать стандартную библиотеку ввода-вывода.
Форма ответа