Как научить отличать цифру от буквы, Нужно чтобы прога ругалась |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Как научить отличать цифру от буквы, Нужно чтобы прога ругалась |
Борец с Паскалем |
Сообщение
#1
|
Гость |
Привет!
У меня вот проблема такая. Мне нужно научить программку отличать цифру от буквы. К примеру при попытке присвоить числовой переменной символьное значение программа вылетает потому как переменная не того типа. Вот мне и нужно как нибудь реализовать эту возможность. Чтоб если пользователь там где надо ввести цифру, случайно или намеренно ввел букву программа не вываливалась а вежливо просила не шалить. Помогите а очень надо |
Lapp |
Сообщение
#2
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Один из вариантов - вот так:
var Либо можешь написать свою функцию вместо ReadLn (или Read) со всеми необходимыми возможностями. Например, на основе ReadKey и KeyPressed. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Борец с Паскалем |
Сообщение
#3
|
Гость |
Да нет так не пашет
|
Lapp |
Сообщение
#4
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
Да нет так не пашет И что она, по-твоему, не пашет? Слушай, если ты о чем-то говоришь, говори КОНКРЕТНО. И если она (моя программа) что-то не делает, что он должна (по-твоему) делать - напиши, ЧТО ИМЕННО. Крылова читал - про мартышку и очки? Перечитай.. Пора уже банить за голословные обвинения.. Стараешься, отвечаешь, пишешь - а в ответ два слова: "не пашет"! Из которых следует только то, что ты даже не понял, как с этим обращаться.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Client |
Сообщение
#5
|
Профи Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: 20 |
Цитата И что она, по-твоему, не пашет? Слушай, если ты о чем-то говоришь, говори КОНКРЕТНО. И если она (моя программа) что-то не делает, что он должна (по-твоему) делать - напиши, ЧТО ИМЕННО. Крылова читал - про мартышку и очки? Перечитай.. Пора уже банить за голословные обвинения.. Стараешься, отвечаешь, пишешь - а в ответ два слова: "не пашет"! Из которых следует только то, что ты даже не понял, как с этим обращаться.. эх... Как я тебя понимаю,хоть еще и новичок |
Lapp |
Сообщение
#6
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
эх... Как я тебя понимаю,хоть еще и новичок Есть еще один способ - может быть, самый оптимальный в твоем случае. Производи ввод в строковую переменную, а потом воспользуйся процедурой Val для преобразования в число. В Val есть диагностика ошибок, но там, если мне не изменяет память, есть свои проблемы.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Гость |
Сообщение
#7
|
Гость |
Как что значит не пашет!
Все очень просто берем код вставляем его в чистый проект запускаем. Видим черный экран - потому как сразу нужно ввести значение для переменной (тут претензий нет).Вводим вместо циферки буковку и вылетаем - ибо как гласит компилятор не гоже буквы пихать в числовые переменные и иже с ним. |
volvo |
Сообщение
#8
|
Гость |
Гость
Вот и приведи тот код, который у тебя получился (ПОЛНОСТЬЮ!, кто там тебя знает, что именно ты называешь пустым проектом), то, что ты вводишь (тоже полностью), и дай примеры БЕЗошибочного ввода. Цитата(Lapp) В Val есть диагностика ошибок, но там, если мне не изменяет память, есть свои проблемы.. Есть... Там проблемы с переполнением. Не отслеживается:var |
Client |
Сообщение
#9
|
Профи Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: 20 |
а можно сделать (но не очень советую) как я недавно, даже не зная про val и {$I-}
я делал через readkey и проверял на цифры, буквы,backspace и точку. Если интересно, то могу поискать Сообщение отредактировано: Client - |
Гость |
Сообщение
#10
|
Гость |
Lapp вариант с IOresult просто шикарен!
Код var a:integer; begin repeat {$I-}ReadLn(a);{$I+} until IOResult=0 end. А как сдесь привинтить человеческий голос. Чтоб если ошибка то выходило сообщение что нужно ввести правильно Я вчера весь день бился но так и не смог IF привинтить. Подсобите люди добрые |
Client |
Сообщение
#11
|
Профи Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: 20 |
if IOresult<>0 then Writeln(' Введите Число');
|
Lapp |
Сообщение
#12
|
Уникум Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: 159 |
вариант с IOresult просто шикарен! Вот вариант с выводом всяких слов: var Обрати внимание на переприсвоение номера ошибки. Два раза вызывать IOResult на одну операцию нельзя, значение сбрасывается при вызове (это функция, а не переменная). -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Client |
Сообщение
#13
|
Профи Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: 20 |
А ведь можно и так, и не нужна проверка никакая...
Код var a:integer; begin repeat writeln(' Введите число без ошибок'); {$I-}ReadLn(a);{$I+} until IOResult=0 end. |
Sozialist |
Сообщение
#14
|
Клавиатурный тиран Группа: Пользователи Сообщений: 79 Пол: Мужской Реальное имя: Дмитрий Репутация: -2 |
Client
Обычно программы делаются на "дурака", т.е. учитываются все случаи. Данный вид недопустим, т.к. существуют случаи, когда программа будет вылетать. Пусть прользуется твоей программой иностранец, что тогда? |
Client |
Сообщение
#15
|
Профи Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: 20 |
а можешь показать как бы ты сам сделал (даже для японцев)?
|
Текстовая версия | 11.01.2025 10:29 |