Проблема при проверке, является ли строка числом в c - PullRequest
2 голосов
/ 24 октября 2019

Для проблемы в классе CS50 я должен проверить, является ли ключ действительным, то есть, является ли введенный пользователем ввод числа. Я пробовал разные коды, но каждый раз, если на входе хотя бы одна цифра, возвращается, что ключ правильный. Хотя это должно быть правильно только в том случае, если все символы строки являются цифрами ...

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

int main(int argc, string argv[])
{
    if (argc !=2)
    {
        printf("Usage: %s key\n", argv[0]);
        return 1;    
    }
    else 
    {   
        for (int i = 0; i <= (strlen(argv[1])); i++)
        {
            if (isalpha(argv[1][i]))
            {
                printf("Usage: ./caesar key \n");
                return 1;
            }

            else
            {
                printf("%s\n", argv[1]);
                return 0;
            }
        }
    }
}

Когда на входе больше 2 строк, он должен возвращать 1 (это работает);

Когда строка [1] не является числом, она должна возвращать 1 (это тоже работает);

, когда строка [1] является числом, она должна печатать 2 строки (не работает);

Например: я ожидаю, что ./caesar 222f вернется: Использование: ./caesar ключ, но фактический результат равен 222f

1 Ответ

0 голосов
/ 24 октября 2019

Ваш код проверяет только первый символ строки - он всегда возвращает результат в зависимости от того, является ли первый символ цифрой или нет.

Вместо того, чтобы печатать успешный результат в цикле, вместо этого дождитесь, пока цикл перебирает все символы, и возвращайте рано, только если обнаружен нечисловой символ:

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

int main(int argc, string argv[])
{
    if (argc !=2)
    {
        printf("Usage: %s key\n", argv[0]);
        return 1;    
    }
    else 
    {   
        for (int i = 0; i <= (strlen(argv[1])); i++)
        {
            if (isalpha(argv[1][i]))
            {
                printf("Usage: ./caesar key \n");
                // Return early for badly formed argument
                return 1;
            }
        }

        // Now that all chars have been validated, print the argument
        printf("%s\n", argv[1]);
        return 0;
    }
}
...