3 / 3 / 2
Регистрация: 18.12.2014
Сообщений: 64
|
|||||||||||
1 | |||||||||||
Некорректно работает функция проверки на численность09.01.2015, 13:21. Показов 799. Ответов 11
Метки нет (Все метки)
Фрагмент кода:
Вводим число "дофига" (большее, чем вмещает тип) - та же ошибка и выброс из цикла. Но если ведем число меньше или равно нулю, все нормально: нужное сообщение об ошибке и повтор цикла. Если потом ввести число "дофига", то выдаст две ошибки: о нечисловом значении, которое мешьне или равно нулю. В чем же дело? (Компилятор от микромягкого VS2010)
0
|
09.01.2015, 13:21 | |
Ответы с готовыми решениями:
11
Функция работает некорректно Функция работает некорректно Функция некорректно работает Функция работает некорректно |
71 / 71 / 58
Регистрация: 12.12.2013
Сообщений: 420
|
|
09.01.2015, 14:01 | 2 |
Ну так "дофига" это есть переполнение типа. Логично, что оно меньше нуля
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
|
09.01.2015, 14:24 | 3 |
Во-первых, от while в 3 строке проку ноль, т.к. в нем находится return. Т.е. это вырождается в обычный if.
Во-вторых, чтобы проверять значение на допустимый диапазон нужно сначала это значение считать в переменную более широкого диапазона. Переменная типа int всегда будет находиться в диапазоне [INT_MIN..INT_MAX]. И тут, кстати, неравенства должны быть строгие.
0
|
3 / 3 / 2
Регистрация: 18.12.2014
Сообщений: 64
|
|||||||||||
09.01.2015, 15:29 [ТС] | 4 | ||||||||||
Конечно, спасибо, но до сих пор прога успешно выходит из цикла при вводе числа "дофига". Ошибка в наличии букв. Может, эта функция изначально неправильно работала...
0
|
:)
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
|
||||||
09.01.2015, 15:43 | 5 | |||||
i не может НИКАК лежать вне диапазона INT_MIN, INT_MAX.
Когда ты вводишь с клавиатуры нечто, что не помещается в этот диапазон, в переменную просто записывается максимальное значение. Пример:
0
|
3 / 3 / 2
Регистрация: 18.12.2014
Сообщений: 64
|
|
09.01.2015, 16:34 [ТС] | 6 |
Это хорошо, но в программе условия: i должна быть числом, влезать в тип и быть строго больше нуля. Потому что если не выполняется хотя бы одно, прога дальше сходит с ума. Как же быть?
0
|
3 / 3 / 2
Регистрация: 18.12.2014
Сообщений: 64
|
|||||||||||
09.01.2015, 17:40 [ТС] | 8 | ||||||||||
Спасибо, надо попробовать.
Добавлено через 20 минут Хмм, если подправить тело цикла, сделав проверку if лестницей if-else, то выводит правильные сообщения об ошибках. Но если ввести "нечто", превышающее long long, выведет сообщение о наличии букв!
0
|
3 / 3 / 2
Регистрация: 18.12.2014
Сообщений: 64
|
|
09.01.2015, 17:51 [ТС] | 9 |
Могу даже картиночку запилить:
Вот мы вводим 2,5ккк - это больше int, но меньше long long Далее вводим "дофига" - та ф-я дает фэиловый бит С точечкой все правильно С -5 тоже На 10 выходим из цикла
0
|
3 / 3 / 2
Регистрация: 18.12.2014
Сообщений: 64
|
|
09.01.2015, 18:31 [ТС] | 11 |
Спасибо.
Добавлено через 5 минут Но это слишком: проще поставить числовое ограничение в пределах типа, т.к. ну очень большие числа тут вряд ли будут использоваться.
0
|
3 / 3 / 2
Регистрация: 18.12.2014
Сообщений: 64
|
||||||||||||||||
19.02.2015, 18:11 [ТС] | 12 | |||||||||||||||
Просто парсить строку здесь непрагматично: можно поставить своего рода костыль: запилить булевскую функцию, которая проверяет значения переменной и которая что-то делает, если значения не совпадают. (Почему-то прога странно шарится в потоке (или я неправильно заставляю ее шариться): условие не совпало, но все равно продолжает.) Например:
0
|
19.02.2015, 18:11 | |
19.02.2015, 18:11 | |
Помогаю со студенческими работами здесь
12
Некорректно работает функция Функция работает некорректно Некорректно работает функция eoln Некорректно работает функция Delete Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |