Посл.ответ |
Сообщение |
Ранг: 469.0 (мудрец), 100thx Активность: 0.25↘0 Статус: Участник [www.AHTeam.org]
|
Создано: 14 ноября 2006 02:42 · Личное сообщение · #1
интересует такой вопрос, как реализовать на С проверку типов данных...
например нужно ввести число, но при вводе вместо чиста - символа (или нескольких символов) нужно вывести сообщение об ошибке...
printf("Enter "a"
");
scanf("%f", &a);
----- -=истина где-то рядом=- | Сообщение посчитали полезным: |
|
Ранг: 209.1 (наставник) Активность: 0.13↘0 Статус: Участник программист априори
|
Создано: 14 ноября 2006 02:50 · Поправил: Black Neuromancer · Личное сообщение · #2
Делаешь преобразование введенного символа (строки) в float или int тип, функция atoi если не ошибаюсь, если при
этом возникает исключение, то выводишь сообщение что типа это не число
так же есть вариант, можно по циклу смотреть ASCII код каждого введенного символа и сверять его с ASCII кодами цифр с 0 по 9, и потом устанавливать флаг если по окончанию выполнения цикла, флаг true то типа введенная строка или символ это число, ну а если false то сразу break цикла и вывод что типа это не число
на самом деле вариантов куча, смотря какая фантазия
| Сообщение посчитали полезным: |
Ранг: 158.4 (ветеран), 123thx Активность: 0.14↗0.49 Статус: Участник
|
Создано: 14 ноября 2006 03:53 · Поправил: rmn · Личное сообщение · #3
Black Neuromancer пишет:
функция atoi если не ошибаюсь, если при
этом возникает исключение
это смотря какой C++. В VC6 atoi просто вернет 0 (или -1, не помню точно), если в строке нет чисел.
Думаю, лучший вариант - это написать фукнции проверки самому. Там ничего сложного нет.
| Сообщение посчитали полезным: |
Ранг: 209.1 (наставник) Активность: 0.13↘0 Статус: Участник программист априори
|
Создано: 14 ноября 2006 03:55 · Личное сообщение · #4
rmn
ну вот даже проще, и не надо исключений %-) короче надо ему MSDN и все тут
| Сообщение посчитали полезным: |
Ранг: 19.0 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 14 ноября 2006 04:37 · Личное сообщение · #5
Если нужно в С - тогда смотриш на ANSI compatibility здесь
Run-Time Library Reference - Data Conversion
msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_data_conversion.asp
Если код будет работать на Win32/64 - тогда можно так
Data Type Conversion Functions
msdn2.microsoft.com/en-us/library/ms221508.aspx
| Сообщение посчитали полезным: |
Ранг: 310.8 (мудрец), 29thx Активность: 0.43↘0 Статус: Участник
|
Создано: 14 ноября 2006 05:37 · Личное сообщение · #6
KingSise пишет:
scanf("%f", &a);
Выдай man scanf Ты увидишь, что есть функции strtol, strtoul и strtod.
Это то , что тебе нужно. Либо делай свою обработку через getc.
| Сообщение посчитали полезным: |
Ранг: 387.4 (мудрец) Активность: 0.17↘0 Статус: Участник системщик
|
Создано: 14 ноября 2006 09:04 · Личное сообщение · #7
KingSise, люди верно говорят - читай в сначала весь input в строку, а потом проверяй из чего эта строка состоит:
a) [0-9]+
b) [0-9a-fA-F]+
c) 0x[0-9a-fA-F]
d) [0-9a-fA-F]+h
e) [0-9.]+
ну и потом конвертируй в зависимости от того что в строке.
| Сообщение посчитали полезным: |
Ранг: 469.0 (мудрец), 100thx Активность: 0.25↘0 Статус: Участник [www.AHTeam.org]
|
Создано: 14 ноября 2006 13:01 · Личное сообщение · #8
Спасибо за помощь, тему закрываю.
----- -=истина где-то рядом=- | Сообщение посчитали полезным: |