Вывести оператор с помощью цикла for и if - PullRequest
0 голосов
/ 23 мая 2019

Мне нужно определить, является ли пользовательский ввод числовым.Мне нужно перебрать каждый символ и проверить, все ли цифры, если нет printf() Сообщение об ошибке, или успешно.Я использовал цикл for для зацикливания каждого символа и оператор if с функцией isdigit() для проверки цифры.Но моя проблема в том, что я печатаю для каждого персонажа.Например, если я введу 22A, я получу 2 сообщения об успехе для 2 и 2, а затем получу сообщение об ошибке для A.Но мне нужно просто напечатать сообщение об ошибке, поскольку 22A не является полностью числовым.

    int n = strlen(argv[1]);
    for (int i=0; i<n; i++){
        if (isdigit((int)argv[1][i]) == 0){
            printf("Error\n");
            return 1;
        }
        else{
            printf("Success\n");
            printf("%i\n", atoi(argv[1]));   
        }
    }

1 Ответ

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

Если бы вы могли использовать другой способ, вы могли бы использовать strspn() из string.h.

size_t n = strlen(argv[1]);
if(strspn(argv[1], "0123456789")==n)
{
    printf("Success\n");
}
else
{
    printf("Error\n");
}

strspn() возвращает количество байтов в начальном сегменте первой строки аргумента, которая состоит только из байтов f от второй строки аргумента, в данном случае это числа.

Таким образом, если значение, возвращаемое strspn(), равно длине строки, строка не содержит нецифровых символов.


strlen() возвращает не совсем int. Это size_t. Лучше использовать последний вместо этого. См. strlen для возврата size_t? .

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