используйте __typeof__ при проверке ввода - PullRequest
0 голосов
/ 11 августа 2010

Можем ли мы использовать __typeof__ для проверки ввода в программе на C, работающей на платформе Linux и как?

Если мы не можем тогда, есть ли другие способы, кроме регулярных выражений, для достижения того же?

1 Ответ

2 голосов
/ 11 августа 2010

«typeof» - это директива времени компиляции. Его нельзя использовать для «проверки ввода».

Правила проверки ввода могут быть сложными. В C они усложняются тем, что инструменты, которые вы имеете в своем распоряжении в стандартной библиотеке C, довольно ужасны. Одним из примеров является atoi (), который вернет 0, если строка, которую вы передаете, не содержит числа в начале (atoi ("hello world") == 0), а "1337isanumber" фактически вернет 1337. просто подтвердите, если что-то является числом, вы можете (предполагая ASCII, а не Unicode) использовать цикл и проверять каждое значение вплоть до первого нулевого терминатора (или размер памяти, выделенной для строки), что каждая цифра на самом деле числовой. Аналогичную процедуру можно выполнить, чтобы проверить, является ли что-то буквенно-цифровым и т. Д. Как вы упомянули, регулярные выражения можно использовать для номера телефона или другого относительно сложного формата данных.

Ваш комментарий ниже ссылается на использование instanceof в Java для проверки ввода, но это также невозможно. Если вы получаете пользовательский ввод, скажем, из командной строки, или с параметром строки запроса, или с чем-то еще, он действительно появляется как строка. Если вы используете объект Scanner для сканирования стандартного ввода и используете метод, такой как nextInt (), он действительно преобразует строку (из потока) во что-то, что может вызвать исключение времени выполнения. Вы не можете использовать instanceof для определения содержимого строки; String - это String - даже если его содержимое равно «42», оно не является экземпляром Integer!

...