Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > нужна помощь в созднии программки |
Автор: baleGos 9.3.2005, 00:06 | ||||
мне нужно добавить сортировку по фамилии(по алфавиту) и исправить баг в функции void clear. вот текст программы
|
Автор: Atos 9.3.2005, 07:01 | ||
![]()
Такое прокатило бы, если p- указатель на массив(хотя, имхо, всё равно извратный способ...) Но p- указатель на структуру!! Бедный компилятор! Попробуй представить себя на его месте: ведь в процессе работы функции ты потаешься получить доступ к её полям, указывая не на саму структуру, а на какое-то место памяти внутри неё |
Автор: Chaos A.D. 9.3.2005, 13:39 | ||||
Какой кашмар!!! Блин, когда я решил тебе помочь, то только минут пять расставлял отступы в твоем коде согласно моим представлениям о его читаемости. Может можно на С++ переписать? Будет раз в пять понятнее. Особенно, если со стандартными контейнерами из STL. Ну да ладно. Чесно говоря, я сидел минут тридцать, чтобы разобраться, что же все-таки делается в программе. Странный стиль у тебя. Начиная с выбора имен для переменных, и заканчивая злоупотреблением глобальными переменными. Но это моё личное и оччень скромное мнение. Вот, адаптировал с горем пополам QuickSort под твои нужды:
Тут base - начало массива, который требуется отсортировать, n - его размер. Т.е. вызываешь так : myqsort( D, n-1 ), и все элементы сортируются. По крайней мере, на моем наборе данных (около 8 man-ов) это сработало. Может быть функция бажная. Я не могу за нее ручаться. Если бы я захотел уверенности в ее работе, я бы все переписал в соответствии с моими представлениями о хорошем коде с самого начала (без обид, ладно?). Далее, с clear у тебя вообще все так запутано. Чего ты от нее ожидаешь? Если она тебе нужна для того, чтобы очищать все и вся, то вызывай ее как clear(D,n); Только после того, как ты все очищаешь, непомешало бы глобальную переменную n изменить.
Еще один минус - у тебя память из под этих очищенных данных так и будет занята. Но если уж браться за улучшение удаления элементов, то тут опять же руки чешутся все переписать. И еще - в функции save у тебя ... for (int i=0;i<n;i++) { fprintf(fd,"%s\n",D.FIO); ... }; Должно быть не D.FIO а D[i].FIO. То же касается и всех остальных полей структуры D. То же самое и в show. |
Автор: Ptica 9.3.2005, 14:09 | ||||
IMHO здесь что-то не так. Вот здесь вот:
Однако без компилятора я сходу не соображу, как лучше это исправить... |
Автор: baleGos 9.3.2005, 15:43 | ||
Спасибо Chaos A.D. за сортировочку, а то у меня голова уже вечером не варила.
Я все проверял, и было D[i].***. незнаю почему так отправилось. |