Ответ тебе дали... хотя ты хотел другое применить в коде.
А мне интересно стало че внутри городит компилятор и оказалось все же наиболее оптимально при isdigit использовать не функцию, а проверку вида:
unsigned char sm = '9';
int a;
if(sm > '9') a = 0;
else if(sm < '0') a = 0; else a = 1;
printf("%d",a);
так как функция всегда накладные расходы на загнать в стек, выгнать из него, да и всякое разное мутят еще.
Здесь же проверяется наиболее вероятное попадание в начале (символ > '9') и потом менее вероятное.
А как перегнать в int ты спрашивал, то вот ответ:
unsigned char sm = '9';
int a;
if(sm > '9') a = -1;
else if(sm < '0') a = -1; else a = sm - 48;
printf("%d",a);
Здесь будет -1 если sm не символ и цифра если символ цифры
Другие языки программирования и технологии
isdigit() Непонятное поведение ф-ции
Ну вообще-то вполне понятное!
По сути это число показывает позицию бита-индикатора.
Например, для Microsoft
#define _UPPER 0x1 /* upper case letter */
#define _LOWER 0x2 /* lower case letter */
#define _DIGIT 0x4 /* digit[0-9] */
#define _SPACE 0x8 /* tab, carriage return, newline, */
#define _PUNCT 0x10 /* punctuation character */
#define _CONTROL 0x20 /* control character */
#define _BLANK 0x40 /* space char */
#define _HEX 0x80 /* hexadecimal digit */
#define _LEADBYTE 0x8000 /* multibyte leadbyte */
#define _ALPHA (0x0100|_UPPER|_LOWER) /* alphabetic character */
Для Borland CBuilder6
enum mask {
space=1<<0, print=1<<1, cntrl=1<<2, upper=1<<3, lower=1<<4,
alpha=1<<5, digit=1<<6, punct=1<<7, xdigit=1<<8,
alnum=(1<<5)|(1<<6), graph=1<<9 };
Для Borland 3.1
#define _IS_SP 1 /* is space */
#define _IS_DIG 2 /* is digit indicator */
#define _IS_UPP 4 /* is upper case */
#define _IS_LOW 8 /* is lower case */
#define _IS_HEX 16 /* [0..9] or [A-F] or [a-f] */
#define _IS_CTL 32 /* Control */
#define _IS_PUN 64 /* punctuation */
В общем кто во что горазд!
По сути это число показывает позицию бита-индикатора.
Например, для Microsoft
#define _UPPER 0x1 /* upper case letter */
#define _LOWER 0x2 /* lower case letter */
#define _DIGIT 0x4 /* digit[0-9] */
#define _SPACE 0x8 /* tab, carriage return, newline, */
#define _PUNCT 0x10 /* punctuation character */
#define _CONTROL 0x20 /* control character */
#define _BLANK 0x40 /* space char */
#define _HEX 0x80 /* hexadecimal digit */
#define _LEADBYTE 0x8000 /* multibyte leadbyte */
#define _ALPHA (0x0100|_UPPER|_LOWER) /* alphabetic character */
Для Borland CBuilder6
enum mask {
space=1<<0, print=1<<1, cntrl=1<<2, upper=1<<3, lower=1<<4,
alpha=1<<5, digit=1<<6, punct=1<<7, xdigit=1<<8,
alnum=(1<<5)|(1<<6), graph=1<<9 };
Для Borland 3.1
#define _IS_SP 1 /* is space */
#define _IS_DIG 2 /* is digit indicator */
#define _IS_UPP 4 /* is upper case */
#define _IS_LOW 8 /* is lower case */
#define _IS_HEX 16 /* [0..9] or [A-F] or [a-f] */
#define _IS_CTL 32 /* Control */
#define _IS_PUN 64 /* punctuation */
В общем кто во что горазд!
Похожие вопросы
- построить программу вывода значения ф-ции y=А*sin(wx) в виде графика, где A=0,5, w=2, x на [0;п] ,на делфи.. . нужен текс
- С++.Почему при удачном выходе из ф-ции main() она должна возвращать 0?
- если я создам сайт, который неявно будет использовать какие-то ф-ции с другого сайта, это законно? пояснения внутри.
- не получается создать специализацию (спец ф-ию) в codeblocks 10,05. C++
- Как в excel разбить столбец ФИО на 3 столбца Ф,И,О
- Рекурсия ф-ии
- как закачать русскоязычные шрифты в фотошоп? кдаю в папку Fonts (в windows) захожу в ф.шоп.НИЧЕГО НЕ ИЗМЕНИЛОСЬ!
- где скачать гтовый сервер кс1.6. ф
- Помоги пож-та. Нужно в word сделать (сверстать) книжгу ф. А5 и распечатать на обычном принтере.
- Существует ли ф-я в ПХП для поиска класса в *.CSS файле?