![]() |
|
#41
|
||||
|
||||
|
Пожалуй, что и так. Я-то читал его уже кое-как зная Си. В принципе можно начинать с любой более-менее популярной книги. Ну а Си изучать лучше, уже имея в запасе знание другого ЯП.
__________________
Лучше гор могут быть только горы, Вниз с которых ещё не съезжал. |
|
#43
|
||||
|
||||
|
Если ты про ХЕ, то нет, я на 2010й. ХЕ особо ничем не отличается, а 2010я у нас купленная :)
__________________
Лучше гор могут быть только горы, Вниз с которых ещё не съезжал. |
|
#44
|
||||
|
||||
|
Цитата:
__________________
|
|
#45
|
||||
|
||||
|
Ламерский вопрос, который почему-то только что пришел мне в голову: кто знает как открепить форму в Embarcadero Rad Studio? То есть, чтобы ее можно было свободно елозить как в Delphi 7?
__________________
|
|
#46
|
||||
|
||||
|
__________________
Лучше гор могут быть только горы, Вниз с которых ещё не съезжал. |
|
#47
|
||||
|
||||
|
Требуется помощь в нахождении ошибки.
Вкратце объясняю поставленную задачу. Надо создать бинарный файл, внести в него некоторые данные (работа ведется посредством структур), потом открыть его, внести еще данные, и напоследок поработать с даннными из файла (за последнее пока не брался). Всё это надо реализовать с помощью функций. Скрытый текст - Вот, то что было сделано: И вот теперь о проблеме. При вводе значения веса багажа (или после ввода количества) программа вылетает... Обнаружить косяк в программе не могу, сколько ни пытаюсь. Может кто чего подскажет, где здесь ошибка?
__________________
Ты неисчерпаем, и на диво трудолюбив© Franka Королевский ГИГААА-ДРРРЕЕЕЛЬ-УДАААААР!!! Блог Харухиста |
|
#48
|
||||
|
||||
|
Цитата:
не связано с главной проблемой, но [PHP]void create(FILE *tf) { char ch; ... getch(); // должно быть ch = getch(); //В void open(FILE *tf) даже переменная под это не декларирована ... while(!feof(tf)) { printf("\n %3d Name %20s with %2d items has %6.2f kilo of luggage \n",i,t1.name,t1.number,t1.weight); fread(&t1,sizeof(t1),1,tf); i++; //должен использоваться для перемешения указателя tf скачками длиной в t1 }[/PHP]
__________________
Certainty is an illusion born of ignorance Последний раз редактировалось Waterplz; 21.04.2011 в 10:28. |
|
#49
|
||||
|
||||
|
Да ладно, нормальная конструкция
Цитата:
Кроме того, Цитата:
__________________
Лучше гор могут быть только горы, Вниз с которых ещё не съезжал. |
|
#50
|
||||
|
||||
|
Цитата:
Цитата:
__________________
Certainty is an illusion born of ignorance |
|
#51
|
||||
|
||||
|
Waterplz, ну, по написанному можно только судить, после каких действий она вылетает, а ведь это не одно и то же.
Если на scanf("%f",t1.weight); - это одно дело, а если на fwrite(&t1,sizeof(t1),1,tf); - другое. Кстати, точно ли нужно &t1, а не *t1? Я уже подзабыл это сишное безумие с указателями/ссылками. Да, и как она вылетает-то? Вроде как должно быть некое сообщение об ошибке.
__________________
Лучше гор могут быть только горы, Вниз с которых ещё не съезжал. |
|
#52
|
||||
|
||||
|
Цитата:
__________________
Certainty is an illusion born of ignorance |
|
#53
|
||||
|
||||
|
Цитата:
Цитата:
А вот с отладкой до сих пор не могу разобраться - использую Dev-C++, а отладчик там какой-то непонятный. Вроде пробегаю по строкам, но вот ничего толком он не выдает... Так, решил проверить первую функции отдельно: Скрытый текст - Открытие файла для записи: Вылетает уже после ввода веса багажа (Weight), причем во время отладки выдает ошибку "Ваша программа вызвала нарушение доступа (ошибка сегментации)". Подозреваю баг связан со строчкой fwrite(&t1,sizeof(t1),1,tf);
__________________
Ты неисчерпаем, и на диво трудолюбив© Franka Королевский ГИГААА-ДРРРЕЕЕЛЬ-УДАААААР!!! Блог ХарухистаПоследний раз редактировалось Gligarr; 21.04.2011 в 17:12. |
|
#54
|
||||
|
||||
|
Цитата:
Gligarr, ну ты даешь, блин! Между "Зависает" и "Вылетает" - огромная разница! И разные причины бага. Тем не менее, всё-таки выясни строчку. Это можно сделать, поставив после каждой строчки вывод чего-нибудь на консоль. Я обычно делаю так (псевдокод): int step = 0; ...do smth... writeln(step++); ...do smth... writeln(step++); ...do smth... writeln(step++); - это сразу покажет, на каком моменте затык
__________________
Лучше гор могут быть только горы, Вниз с которых ещё не съезжал. |
|
#55
|
||||
|
||||
|
SpellCaster, попробовал так проверить. Сбой происходит при выполнении команды (!) scanf("%f",t1.weight);
Теперь вот думаю, к чему бы это... Ведь получается программа просто не может по какой-то причине принять ввод значения с клавиатуры... Upd, всё разобрался, походу нужен имперсант... Всё, основная программа теперь заработала как надо! Вся ошибка заключалась в том что ввод с клавиатуры уходил по сути "в никуда"... Да, это была глупая ошибка с моей стороны не расставить знак & перед численными значениями из структур)
__________________
Ты неисчерпаем, и на диво трудолюбив© Franka Королевский ГИГААА-ДРРРЕЕЕЛЬ-УДАААААР!!! Блог ХарухистаПоследний раз редактировалось Gligarr; 21.04.2011 в 17:33. |
|
#56
|
||||
|
||||
|
Цитата:
__________________
Certainty is an illusion born of ignorance |
|
#57
|
||||
|
||||
|
Цитата:
А вот здесь почему то не получается удалить структуру... Как раз переходит или в бесконечный цикл, или не даёт нужного эффекта. Баг происходит после нажатия клавиши "Y", если верить отладчику... Вообще, как можно организовать удаление определенной структуры? Скрытый текст - Удаление структур с t1.weight<10: По выполнении программы обнуляется (а нужно чтоб удалилась) первая строчка удовлетворяющая заданному условию. А остальные, тоже удовлетворяющие, почему-то остаются без изменений (хотя тоже должны удалиться)... Вот программа целиком: Скрытый текст - Программа:
__________________
Ты неисчерпаем, и на диво трудолюбив© Franka Королевский ГИГААА-ДРРРЕЕЕЛЬ-УДАААААР!!! Блог Харухиста |
|
#58
|
||||
|
||||
|
Ууу, брат. Удаление из/добавление в середину в файлах делается только с копированием остального хвоста файла. То есть в случае удаления тебе надо делать так:
1) Прочитать структуру t1 2) Проверить условия, спросить 3) Если удовлетворяет условию, цикл: * Прочитать следующую структуру t2 * Переместиться на 2*SizeOf(luggage) назад (потому что к этому моменту указатель в файле будет у начала второй структуры после удаляемой t1 - назовем ее t3) * Записать в текущее место t2 * Переместиться на SizeOf(luggage) вперед * Повторить цикл 5) В конце обрезать файл на SizeOf(luggage) байт То есть, проще говоря, по кусочкам "подтащить" структуры, заполнив свободную ячейку в файле Что же касается твоего кода "Удаление структур с t1.weight<10", то ты там вообще что-то непонятное творишь. В случае утвердительного ответа перезаписываешь структуру, которую надо удалять, причем на ту же позицию, где она и есть в файле, а потом еще и зачем-то закрываешь файл
__________________
Лучше гор могут быть только горы, Вниз с которых ещё не съезжал. |
|
#59
|
||||
|
||||
|
Цитата:
1) добавить в структуру поле bool deleted, по умолчанию присваивать false 2) при согласии пользователя на удаление структуры, менять её в true 3) вывод и обработку производить только если !deleted 4) создать отдельную утилитку, которая будет: 4.1) читать структуры исходного файла 4.2) если !deleted записывать их во временный 4.3) по окончании, проверить, что временный файл существует и непуст 4.4) если это так, то переместить исходный файл в архив, а временный переименовать в исходный 5) запускать эту утилитку, скажем, еженедельно
__________________
|
|
#60
|
||||
|
||||
|
Это всё, конечно, верно, но для случая реального применения. А тут, вроде бы, была лаба.
__________________
Лучше гор могут быть только горы, Вниз с которых ещё не съезжал. |