![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
Здравствуйте, столкнулась со следующей проблемой.прошу помочь) Задание: дан файл структур , необходимо упорядочить его по выбранному полю, и переписать уже отсортированный массив структур в этот же файл
само упорядочивание реализовано в этой программе ,эта программа работает) но нужно её исправить так чтобы структуры не вводились с клавиатуры, а считывались из файла а потом перезаписывались в этот же файл. Вот код: Очень прошу помочь
Добавлено @ 09:08 мне очень нужна ваша помощь, все что я могла, я сделала) если кому не очень сложно, потратьте пожалуйста немного времени... Это сообщение отредактировал(а) MAKCim - 13.4.2008, 09:10 |
|||
|
||||
jonie |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
только про проверки на ошибки забывать не стоит Это сообщение отредактировал(а) jonie - 13.4.2008, 14:30 -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
jonie, спасибо тебе за внимание) я уже перепробавала множество функций, но видимо что-то не понимаю в их применении, можно попросить тебя применить эти функции к своей программе, если тебе конечно несложно
![]() |
|||
|
||||
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
файл структур уже изначально задан... |
|||
|
||||
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
неужели так сложно....
|
|||
|
||||
serega00 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 14.4.2008 Репутация: нет Всего: нет |
н-да что то вообще не понятно...
|
|||
|
||||
Rififi |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1254 Регистрация: 9.3.2008 Репутация: 3 Всего: 36 |
Хы. такаое впечатление, что функцию sortirovka ты нашла на какой-то помойке, впечатление оно конечно жуткое производит, был бы я менее закалённым в боях, мне бы по ночам кошмары снились :gigi:
я бы исправил её на такой вариант, или хотя бы отформатировал код. // Сортировка по полю nazvanie int __cdecl NazvanieComparer(const void* p1, const void* p2) { const struct film* f1 = (const struct film*) p1; const struct film* f2 = (const struct film*) p2; return strcmp(f1->nazvanie, f2->nazvanie); } struct film* db; // массив структур film size_t N = ... // количество элементов в массиве qsort(db, N, sizeof(struct film), NazvanieComparer); |
|||
|
||||
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
сортировка-то как раз работает, и сделана согласно требованиям, а вот как привязать мою программу к файлам я не знаю, помогите, пожалуйста, программисты, мне очень нужна ваша помощь.... если кто-то знает, не пожалейте немного времени на меня....
Это сообщение отредактировал(а) МальвинаC - 14.4.2008, 17:09 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
МальвинаC, привязка к файлам осуществляется с помощью функций fopen, fclose, fseek, fprintf и fscanf. Тебе лишь надо заменить все scanf и printf отвечающие за ввод и вывод массива, на fscanf и fprintf, а так же добавить открытие и закрытие файла.
|
|||
|
||||
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
структуру не так просто считать из файла, в этом вся загвостка, записать в файл несложно, вот:
а вот как считать я не знаю, напишите если кто знает |
|||
|
||||
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
здесь одна структура записывается в одну строку, поля через пробелы
|
|||
|
||||
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
если кто знает, напишите пожалуйста как...потому что я не понимаю...
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
МальвинаC, проще всего это делать так:
|
|||
|
||||
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
спасибо, более мненее ясно, сейчас попробую применить у себя, просто уверена, что сейчас начнут возникать проблемы
![]() |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Если тупо взять и засунуть, то да - будут проблемы. Надо подойти творчески. ![]() |
|||
|
||||
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
спасибо за внимание, вставила новые строки, компилятор как будто бы не понимает что такое i, что он зацикливает и не считывает в массив структур
вот мой исходник
Это сообщение отредактировал(а) МальвинаC - 15.4.2008, 16:44 |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
МальвинаC, ну отформатируй код наконец - самой же искать ошибки будет проще. Например, так:
В частности, где у тебя i инициализируется перед использованием в 106-й строке? Кстати, что такое "компилятор не понимает" по твоему? Когда компилятор не понимает, он выдает ошибку. |
|||
|
||||
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
он сейчас выдает фильм номер 1....
название... ..... фильм номер номер 2.... название ..... .... .... фильм номер 2013 тоесть i=2013? да, я так понимаю, именно в 106 строчке |
|||
|
||||
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
ужасное, что я не вижу ошибку, а сдавать завтра
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
![]() |
|||
|
||||
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
ну я прописала i=0; он все равно не считывает, помоги пожалуйста исправить код.... я уже в панике....
Добавлено через 7 минут и 44 секунды кстати j=j+1? в цикле for нужно убрать, но он все равно не считывает |
|||
|
||||
bsa |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
feof() выдает 0, когда файл не достиг конца. while выполняется пока условие не равно нулю. Таким образом, цикл не выполняется никогда. Чтобы он выполнялся, нужно инвертировать условие:
Далее, когда ты пишешь цикл
|
||||||
|
|||||||
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
ну да, логично с файлами, и почему же он не считывает
|
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
МальвинаC, отформатируй весь свой код так, как я показал. Тогда и будем ошибки искать.
Кстати, ты !feof(f) сделала? |
|||
|
||||
МальвинаC |
|
||||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
да, сделала) сейчас выложу код
Добавлено через 54 секунды
Добавлено через 2 минуты и 5 секунд ой, сейчас весь выложу Добавлено через 10 минут и 54 секунды сортировка проходит верно, ошибка где-то с файлами
|
||||
|
|||||
Optimus |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 1.9.2007 Репутация: нет Всего: 14 |
а куда всё это записывается, ведь f закрыта. проверьте ещё раз содержимое файла. --------------------
"постановка задачи наполовину решает саму задачу" |
|||
|
||||
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
файл открыт для чтения когда мы записываем в массив структур, а для записи, когда записываем в файл
Добавлено через 2 минуты и 1 секунду когда он заккрыт, мы просто выводим массив структур на экран |
|||
|
||||
Optimus |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 1.9.2007 Репутация: нет Всего: 14 |
а ничего что в файл записывается "\n", но не считывается. Извиняюсь если где-то не прав, мало на С программировал. --------------------
"постановка задачи наполовину решает саму задачу" |
||||
|
|||||
МальвинаC |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 13.4.2008 Репутация: нет Всего: нет |
я тоже мало) думаю ничего страшного, /n-переход на новую строку, а считывает он построчно.... хотя не знаю, я надеюсь на bsa
![]() |
|||
|
||||
Optimus |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 1.9.2007 Репутация: нет Всего: 14 |
файл открывается, но переменной f не присваивается проверьте ещё раз содержимое файла. Это сообщение отредактировал(а) Optimus - 15.4.2008, 20:01 --------------------
"постановка задачи наполовину решает саму задачу" |
|||
|
||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
МальвинаC
Во-первых, когда ты открываешь файл, то ты должна сохранить его дескриптор, в строке 103 ты его сохраняешь в переменную f, а в строке 127 нет, поэтому дальнейшая операция fprintf пытается вывести данные непонятно куда (в закрытый файл). Во-вторых, файл может не открыться, поэтому ты должна проверить его дескриптор на NULL и вывести сообщение об ошибке. В-третьих, в строке 127 операция fopen("file.txt", "r") открывает файл только для чтения. А тебе нужно в него писать. Поэтому замени "r" на "w" В-четвертых, перед закрытием файла делать fseek смысла нет никакого - позиция после открытия не зависит от той, что была перед закрытием. В-пятых, ты так и не исправила работу с неинициализированной переменной i (строка 100). В-шестых, при форматировании кода после фигурной скобки может идти только комментарий. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |