Как определить, является ли пользовательский ввод числом, используя булеву функцию в C - PullRequest
1 голос
/ 12 мая 2019

Я пытаюсь выяснить, как определить, является ли пользовательский ввод числом, а не буквой / символом (A, a,!, @, #, $,%) В C, используя булеву функцию.Код, который я использую (оператор if), работает только для строчных и прописных букв.Ниже приведен мой код для оператора if, который работает.Ниже я добавлю логическую функцию, которую я (безуспешно) пытаюсь выполнить.Я что-то упустил в моей логической функции?

    if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')){
    printf("Character '%c' does not represent a digit\n", ch);}


    _Bool isNumber(char ch) {
    printf("Character '%c' does not represent a digit\n", ch);
    return 0;}

Возможно ли это без библиотечной функции?

Ответы [ 2 ]

1 голос
/ 12 мая 2019

Стандартная библиотека C уже имеет такой зверь:

#include <ctype.h>
:
if (! isdigit(ch)) {
    printf("'%c' is not a digit\n", ch);
}

Если по какой-то странной причине (a) вы не можете использовать стандартную библиотечную функцию, просто бросьте свою собственную:

bool isDigit(int ch) {              // Uppercase D to distinguish it.
    return ch >= '0' && ch <= '9';
}

Вы также можете сделать это непосредственно в коде, а не как функцию:

if (ch <  '0' || ch >  '9') puts("Not a digit"); // or:
if (ch >= '0' && ch <= '9') puts("Is  a digit");

Цифровые символы в C * гарантированно смежными, в отличие от всех других символов. Вот почему делать то же самое для альф (например, ch >= 'a' && ch <= 'z') - плохая идея.

Имейте в виду, что одиночный символ является цифрой. Похоже, это то, что вы хотите. Чтобы проверить, является ли символ string допустимым целым числом, он должен быть более сложным. По сути, каждый символ должен быть цифрой, и у него может быть дополнительный знак спереди. Примерно так будет хорошим началом:

bool isInt(char *sstr) {
    unsigned char *str = sstr;
    if (*str == '+' || *str == '-')
        ++str;
    if (! isdigit(*str++))          // or your own isDigit if desired.
        return false;
    while (*str != '\0')
        if (! isdigit(*str++))      // ditto.
            return false;
    return true;
}

(a) Хотя я полагаю, вы, возможно, захотите сделать это в образовательных целях, поэтому необязательно , что причудливо: -)

0 голосов
/ 12 мая 2019

Если вы хотите остаться верным своей исходной логике, if(ch >= '0' && ch <= '9')) будет истинным, если ch - любая цифра, и ложным для любого другого символа.

...