isdigit () неожиданное поведение?

0

Почему isdigit работает не так, как ожидалось. Я пытаюсь проверить, является ли ввод цифрой или нет. Если ввод является цифрой, напечатайте True else False.

#include<stdio.h>
#include<ctype.h>

int main()
{
    int h;
    printf("Height: ");
    scanf("%d", &h);
    if (isdigit(h))
        printf("True");
    else
        printf("False");
}

Но он всегда возвращает False.

Входные данные :

Высота: Foo

  • 2
    Что вы ввели?
  • 2
    Isdigit проверяет кодовый код не, если его int
Показать ещё 4 комментария
Теги:

2 ответа

5

Потому что ваши ожидания неверны. isdigit() вызывается для символа, чтобы увидеть, содержит ли он десятичную цифру, '0' - '9'. Вы вызываете его на int, который уже является двоичным значением.

  • 0
    Как проверить, не является ли ввод символом?
  • 0
    @rcomp Прекратите использовать scanf() и попробуйте нормальную функцию, такую как fgets() , для получения пользовательского ввода. Затем подтвердите его (например, используя strpbrk() ).
1

Вы ошибаетесь в понимании функции isdigit. вход этой функции - char. поэтому вы можете изменить это:

char h;
printf("Height: ");
scanf("%c", &h);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню