Проверка ввода в программу на C - PullRequest
0 голосов
/ 11 августа 2010

У меня есть программа переменного тока, в которой я принимаю 2 числа в качестве входных данных.Как проверить, если введенный ввод состоит только из цифр, а не из символов.

void main()
{
  int a,b;
  printf("Enter two numbers :");
  scanf("%d%d",&a,&b);
  printf("Number 1 is : %d \n Number 2 is : %d",a,b);
}

[Редактировать] Добавлен пример кода

Ответы [ 2 ]

3 голосов
/ 11 августа 2010

Помимо других интересных предложений (особенно с scanf), вы также можете использовать функцию isdigit :

Функция isdigit () должна проверить является ли с символом класса цифра в текущей локали программы

обратите внимание, что эта функция проверяет только ОДИН символ, а не всю их совокупность.

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

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

2 голосов
/ 11 августа 2010

scanf возвращает количество элементов, которые были успешно отсканированы. Если вы запросили два целых числа с %d%d, а scanf возвращает 2, значит, он успешно отсканировал оба числа. Любое число меньше двух означает, что scanf не смог отсканировать два числа.

int main()
{
    int a,b;
    int result;

    printf("Enter two numbers :");
    result = scanf("%d%d",&a,&b);

    if (result == 2)
    {
        printf("Number 1 is : %d \n Number 2 is : %d",a,b);
    }
    else if (result == 1)
    {
        // scanf only managed to scan something into "a", but not "b"
        printf("Number 1 is : %d \n Number 2 is invalid.\n", a);
    }
    else if (result == 0)
    {
        // scanf could not scan any number at all, both "a" and "b" are invalid.
        printf("scanf was not able to scan the input for numbers.");
    }
}

Еще одно значение, которое может вернуть scanf, равно EOF. Он может вернуть это, если есть ошибка чтения из потока.

Также обратите внимание, что main возвращает int, но вы объявили его с void return.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...