isalpha()
объявлен в ctype.h
Было бы полезно знать, что, хотя аргумент для isalpha
(и всех функций семейства isxxx
) является int
, поведение не определено, если аргумент отрицательный. Так что, если вы работаете на машине, где char
подписано по умолчанию, вы можете столкнуться с проблемами, если не выполните приведение первым. Так:
char c;
// Some code
if(isalpha((unsigned char) c)) {
Это может быть хорошей привычкой всегда использовать эти функции. Однако НЕ используйте кастинг в качестве перехода для отключения предупреждений. Он может легко скрыть ошибки. В большинстве случаев, когда требуется приведение, ваш код неверен по какой-то другой причине. Разглагольствования о кастинге
Еще одна ловушка с этими функциями (и многими другими функциями C, которые возвращают int
как логическое значение) заключается в том, что они должны возвращать ноль в случае false, но могут возвращать любое ненулевое значение в случае true. Так что такая проверка - полный бред:
if( isalpha(c) == 1 )
Вместо этого выполните любое из следующих действий:
if( isalpha(c) != 0 ) // If not zero
if( isalpha(c) ) // Use directly as Boolean (recommended)
if( !! isalpha(c) == 1) // Double negation turns non zero to 1
person
klutt
schedule
12.05.2021
isalpha
. Он скажет вам, что вам нужно#include
определенный заголовочный файл. - person Some programmer dude   schedule 12.05.2021isalpha()
должен быть приведен кunsigned char
до вызова функции (isalpha( (unsigned char)input )
). Невыполнение этого требования может привести к проблемам на некоторых машинах, гдеchar
подписано. - person DevSolar   schedule 12.05.2021char
илиsigned char
. Нет, здесь нет строгой необходимости. Но это хорошая привычка, потому что ошибки, которые вы не делаете, могут быть трудно поймать. - person DevSolar   schedule 12.05.2021