функция для проверки arg c и argv cs50 - PullRequest
0 голосов
/ 20 апреля 2020

Попытка написать функцию, которая будет проверять agr c == 2, argv [1] не отрицателен, а в argv [1] есть только цифры, иначе основная программа просто не запустится, и мы введем что-то вроде «Ошибка! Использование» : ./code key "Таким образом, если мы введем ./code -1 или ./code 123 gdf или ./code 123sdf, мы столкнемся с сообщением об ошибке, и основная программа не будет работать, но если мы введем ./code 123, то мы хороши, и программа будет работать далее.

int validkey(int argc, string y)
{   

    int yl = strlen(y);

    if (argc == 2 && atoi(y) > 0) //atoi coverts string into int
    {
        for (int i = 0; i < yl; i++)
        {
            if (isdigit(y[i]))
                {
                printf("we good\n");
                return 0;
                }
            else
                {
                printf("Usage: ./code key\n");
                return 1;
                }
        }
    }
    else
    {
        printf("Usage: ./code key\n");
        return 1;
    }
return 0;
}

, поэтому в основной программе мы имеем что-то вроде этого if (validkey(argc,argv[1])) и основной код продолжается. Но эта функция не работает ВСЕ, она не нарушает основной код, независимо от того, что мы печатаем (возвращаем 1; стоит ли его тормозить?), И если мы введем ./code 123ads, она пройдет проверку и вернет 0; Что я сделал не так?

1 Ответ

0 голосов
/ 22 апреля 2020

хорошо, я понимаю, что было не так, во-первых, лучше решить эту проблему с bool, а не int, во-вторых, важно понять, как l oop работает. Его проверка y[i], и если это true, поэтому, если y[0] имеет значение di git l oop wont go, то дальше не проверяет y[1] y[2] et c, его остановки и returns 0, так что если мы набираем 2d3d l oop и проверяем y[0] его 2, поэтому его di git, поэтому мы хороши и возвращаем 0 и не проверяем y [1] ... et c. так что мое решение noob это добавить еще один int veriable counter = 0 для примера и

if(isdigit(y[i]))
{
    coounter++;
    if (counter == yl)
    {
        printf("we good\n");
        return 0;
    }
}

так окончательный вариант:

// check_the_key(argc, argv[1])
bool check_the_key(int argc, string argv)
{
    // atoi coverts string into int
    int key = atoi(argv);
    if (argc == 2 && key > 0)
    {
        int counter = 0;
        int lenv = strlen(argv);
        for (int i = 0; i < lenv; i++)
        {
            if (isdigit(argv[i]))
            {
                counter++;
            }
            if (lenv == counter)
            {
                printf("we good\n");
                return true;
            }

        }
    }
    printf("Usage: ./caesar key\n");
    return false;
}
...