2010-05-11 3 views
2

Мне нужно краткое описание того, как работают две команды isdigit() и isalpha(). Конечно, я читал онлайн-источники, прежде чем задавать вопрос, но я попробовал их и не мог заставить их работать. Каков самый простой способ их использования?Каков самый простой способ использования команд isdigit() и isalpha()?

Я знаю, что это возвращает значение, поэтому я предполагаю, что я могу использовать его как это:

if(isdigit(someinput)==1) 
return -1; 

Является ли это правильно? Могу ли я использовать это для любого типа персонажа? Могу ли я сравнить его с числом или массивом с плавающей точкой?

Предположим, я хочу отсканировать текстовый файл с цифрами и буквой и определить, что сканирую. Могут ли эти две команды использоваться в этом контексте?

ответ

1

Они не являются «командами», они являются функциями. Функции принимают аргументы и возвращают значения.

#include <ctype.h> 
int isdigit(int ch); 

Это подпись для функции isdigit: это указывает на то, что он будет принимать int значение (или что-то, что может быть приведен к int, как char), и возвращает int. Поэтому вы не можете передать массив (хотя вы можете называть его на каждом члене int[]).

Подпись для isalpha идентична (за исключением названия, очевидно).

В документации говорится следующее:

Описание: Функция ISALPHA() возвращает ненулевое значение, если ее аргумент является буква алфавита. В противном случае возвращается .

Это будет ваше сравнение недействительным для всех реализаций. Лучше сделать что-то вроде:

if (isdigit(someinput)) { 
return -1; 
} 

В C, 0 будет вычисляться false в логическое выражение, и все ненулевые значения оценки для true. Таким образом, эта проверка будет охватывать реализации isdigit, которые возвращают -1, 5, что угодно.

Если вы хотите применить их к значениям в текстовом файле, вы должны прочитать текст по одному символу за раз и передать символы, которые вы получаете этим методам.

+0

Спасибо! Поэтому я могу использовать это только для сравнения одного символа? – NLed

+0

Один вызов этой функции будет иметь один символ, но, конечно, вы можете повторить по мере необходимости. – danben

+0

Спасибо за ответ, один окончательный оффтопический вопрос ... Что такое метод преобразования символа в число? – NLed

0

Вы можете использовать его для любого char type! (на самом деле это int, я не знаю, относится ли это к соображениям совместимости или к чему-то еще, но наиболее частое использование используется для символов)

Он будет определять, является ли, например, «5» цифрой или буквенно-цифровым (часть алфавит).И да, ваше использование является правильным, если someInput имеет тип «символ»

+0

Спасибо за ответ :) – NLed

+0

Эй, без проблем! Вот для чего я здесь! – LukeN

+1

Функции 'isxxx()' определяются как взятие 'int' и могут передаваться все значения, возвращаемые' getchar() ',' getc() 'и' fgetc() ', то есть все значения типа' unsigned char' плюс специальное значение 'EOF', а другое нет. – chqrlie

2

Вы делаете не обычно хотят, чтобы сравнить возвращаемое значение, рассматривать его как логическое значение:

if (isalpha(someinput)) 
    do_whatever(); 

Если вы настаиваете на делая сравнение, оно должно быть !=0, но оно полностью избыточно и бессмысленно.

Вы используете его на символах, которые были прочитаны с ввода, которые не являются (в этой точке) плавают или что-то еще, только группы символов. В случае поплавка некоторые из них будут цифрами, но многие также будут содержать десятичные точки (которые не являются цифрами) и, возможно, случайные e, + или -.

Также обратите внимание, что перед вызовом любой из функций is* вы обычно должны вводить ввод в unsigned char. Многие наборы символов будут обрабатывать некоторые символы как отрицательные, если их рассматривать как signed char, и передача отрицательного значения любому из них дает неопределенное поведение.

+0

Что делать, если отсканированный ввод - это число, которое будет использоваться позже для расчета? – NLed

+0

@ZaZu: если вы уже конвертировали что-то в число, больше нет никакого реального использования для 'isdigit' или' isalpha' - теперь это число, а не цифра или буквенный символ. –

+0

Как преобразовать символ в число? – NLed

 Смежные вопросы

  • Нет связанных вопросов^_^