Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› проверка типов данный С++
Посл.ответ Сообщение


Ранг: 469.0 (мудрец), 100thx
Активность: 0.250
Статус: Участник
[www.AHTeam.org]

Создано: 14 ноября 2006 02:42
· Личное сообщение · #1

интересует такой вопрос, как реализовать на С проверку типов данных...

например нужно ввести число, но при вводе вместо чиста - символа (или нескольких символов) нужно вывести сообщение об ошибке...

printf("Enter "a" ");
scanf("%f", &a);

-----
-=истина где-то рядом=-





Ранг: 209.1 (наставник)
Активность: 0.130
Статус: Участник
программист априори

Создано: 14 ноября 2006 02:50 · Поправил: Black Neuromancer
· Личное сообщение · #2

Делаешь преобразование введенного символа (строки) в float или int тип, функция atoi если не ошибаюсь, если при
этом возникает исключение, то выводишь сообщение что типа это не число

так же есть вариант, можно по циклу смотреть ASCII код каждого введенного символа и сверять его с ASCII кодами цифр с 0 по 9, и потом устанавливать флаг если по окончанию выполнения цикла, флаг true то типа введенная строка или символ это число, ну а если false то сразу break цикла и вывод что типа это не число

на самом деле вариантов куча, смотря какая фантазия



Ранг: 158.4 (ветеран), 123thx
Активность: 0.140.49
Статус: Участник

Создано: 14 ноября 2006 03:53 · Поправил: rmn
· Личное сообщение · #3

Black Neuromancer пишет:
функция atoi если не ошибаюсь, если при
этом возникает исключение

это смотря какой C++. В VC6 atoi просто вернет 0 (или -1, не помню точно), если в строке нет чисел.
Думаю, лучший вариант - это написать фукнции проверки самому. Там ничего сложного нет.




Ранг: 209.1 (наставник)
Активность: 0.130
Статус: Участник
программист априори

Создано: 14 ноября 2006 03:55
· Личное сообщение · #4

rmn

ну вот даже проще, и не надо исключений %-) короче надо ему MSDN и все тут



Ранг: 19.0 (новичок)
Активность: 0.010
Статус: Участник

Создано: 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.430
Статус: Участник

Создано: 14 ноября 2006 05:37
· Личное сообщение · #6

KingSise пишет:
scanf("%f", &a);

Выдай man scanf Ты увидишь, что есть функции strtol, strtoul и strtod.
Это то , что тебе нужно. Либо делай свою обработку через getc.




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 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.250
Статус: Участник
[www.AHTeam.org]

Создано: 14 ноября 2006 13:01
· Личное сообщение · #8

Спасибо за помощь, тему закрываю.

-----
-=истина где-то рядом=-



 eXeL@B —› Программирование —› проверка типов данный С++
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати