Консультация # 186139: Здравствуйте! Возникли проблемы в решении данного задания: Задание : Написать программу для работы по запросам оператора с упорядоченной таблицей, реализованной в виде двоичного дерева поиска. Ключ - целое число.Информация - строка произвольной длины. Узел дерева содержит ключ,указатели на правое и левое поддеревья и ука...
Узел дерева содержит ключ,указатели на правое и левое поддеревья и указатель на информационное поле.
В таблице могут храниться записи с одинаковыми ключами в одном узле дерева в виде списка информационных полей.
Предусмотреть
следующие операции: - включение нового элемента в таблицу без нарушения свойств упорядоченности - удаление из таблицы элемента,заданного своим ключом,без нарушения свойств упорядоченности таблицы(если элементов несколько, то указывается номер удаляемого элемента); - поиск информации по заданному ключу (в качестве результата возвращается все элементы с заданным ключом); - вывод всего содержимого таблицы в обратном порядке следования ключей, не превы
шающих заданный - поиск элемента соответствующего значению наименьшего ключа
Примечания: 1.Программа должна содержать несколько функций;функция main должна выполнять: вывод меню, ввод и анализ ответа,вызов на исполнение требуемой функции; 2.В программе нужно предусмотреть проверку правильности ввода данных. 3.Оценить сложность реализованных алгоритмов. 4.(*) Для целей отладки реализовать форматированный вывод таблицы в виде дерева. 5.(*) Для целей отладки реализовать загрузку таблицы
из файла в формате
- Ключ1 - Информация1 - Ключ2
Все работает верно! НО вопрос в следующем:
Проверку на введенные данные
Например, ввод ключа должен быть из чисел! 1)Ввожу ключ Please, enter the key: ggf Wrong value! Wrong value! Wrong value! Далее происходит Ожидание ввода ключа Выдает ошибки посимвольно, хотя нужно чтобы ошибка выдавалась 1 раз и ожидало ввода повторного ключа. 2)при вводе ключа 1 Please, enter the key: 7gg автоматически появляется строка please, enter the information: _________________________ При этом идет запись в дерево 4 7(gg) то есть ключ 7 а информация gg. Хотя информации предложено ввести не было 3)при вводе ключа
1 Please, enter the key: ggg43fdf Wrong value! Wrong value! Wrong value! please, enter the information: _________________________
Выдается 3ошибки потом записывается ключ 43 и информация fdf.Такого быть не должно
должна ошибка и повтор ввода.
Было предложение сделать через операцию atoi проверка введенных данных на цифры.
Прошу помочь с проверкой ввода данных( если можно с комментариями исправление ошибки, текст программы приложу ниже).
cin.ignore() - делает сдвиг на один символ, у данной функции есть два параметра: первый это количество пропускаемых символов (по умолчанию 1). Поэтому и выдаются ошибки на каждый буквенный символ.
Вот рабочий код.
Код :
int GetNum()
{
int a=-1;
do
{
char s[256];
cin >> s; // считываем вводимые данные
bool b=true;
for(int i=0; i <strlen(s); i++) // проверяем на наличие не цифры
{
if (('0' > s[i]) || (s[i] > '9')) {b=false; break;};
};
if(!b) cout << "Wrong value!" << endl;
else a = atoi(s);
}
while(a < 0);
return a;
}
Консультировал: Сергей (5-й класс)
Дата отправки: 22.05.2012, 13:47
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались.
Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора -
для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение.
Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал,
который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом.
Заходите - у нас интересно!