llerik
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Вот эта запись вызывает вопросы: Код: if (!root) root=first(temp_eng, temp_count); else tree *root=search_insert (root, temp_eng, temp_count); }; // кстати, скобки эти необязательны break; | | Если убрать скобки, то компилятор ругаться начианет. Убрал этот стремный кусок, но не полегчало... Если раньше "Если ввести в базу несколько слов, и попросить вывести, то выводится только первый элемент, т.е. корень дерева..." То теперь выводится последнее введенное, т.е., как я понимаю, что-то вроде: Цитата: возвращаемое ф-цией search_insert() сохраняется во временную переменную root, которая видна только в переделах блока else. | А как иначе? Где написано, что переменная временная, объявлена она в блоке main? Или временными считаются те, что не объявлены как константы...? Цитата: Кстати, вот в ф-ции search_insert() есть вот такой дурно пахнущий код: | Функции объединил, за ненадобностью и для упрощения (на мой взгляд...) Цитата: Если хотите помощи, давайте точный test case -- типа ввести это, это, это и тогда результат такой, а должен быть вот такой. | Приведенный ниже код у меня работает, т.е. запускается, на всякий пожарный прилеплю получающийся у меня .exe-шник, раз такие проблемы с компилированием. И так, после запуска программы на экране появияется: Vvedite angliskoe slovo: //вводим абракадабру, для экономии времени (на англ. раскладке), вида: "dkgdsgkds" (без кавычке) Vvedite znachenie schetchika: //вводим число, например 45 //Появляется результат (т.е. полученное дерево) вида: @ dkgdsgkds (45) @ //Значком "@" я решил обозначить "пустых потомков", или их отсутствие, иначе говоря. //После чего можно повторить то же самое, в результате мы всегда будем получать то, что ввели в последний раз. В идеале это должно было бы выгледеть примерно так: @ ldkghld (12) @ dkgdsgkds (45) @ dkghdk (60) @ Цитата: Цитата:Ведь в главной функции этих переменных нет и компилятор будет ругаться. Они есть в главной ф-ции, т.к. их туда возвращают ваши ф-ции. | Достаточно ли ограничиться только удалением root? Ведь функцию search_insert() мы присваиваем именно ей. Или опять не так? Цитата: Судя по вашему ответу вы ещё не(до)читали Кернигана и Ритчи, про Страуструпа я уж и говорить не буду | Ну что же я могу поделать, если С++ вижу пол года, а курсач уже греется? Цитата: P.S. Если пользователь в меню вводит не число от 1 до 4 до программа входит в вечны цикл. Нужно заменить break на return 1. | Заменил. ------------------------------------------------------------------------------------ В очередной раз обновленная прогамма Ссылка на архив с скомпилированной программкой (10 кб) http://ifolder.ru/6535489 | Всего записей: 8 | Зарегистр. 02-05-2008 | Отправлено: 01:11 13-05-2008 | Исправлено: llerik, 17:05 14-05-2008 |
|