Как проверить возвращаемое значение функции в операторе if, не вызывая его - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь проверить возвращаемое значение функции в операторе if, чтобы я возвращал его значение, если оно равно 1, но оно вызывается, когда я делаю это в операторе if. Есть ли способ предотвратить вызов в операторе if. Я хочу проверить все три функции, но если я проверил одну без оператора if, он вернет 0 и остановится.

    if (argc != 2)
    {
        printf("Usage: ./substitution key\n");
        return 1;
    }
    else
    {
        string chars = argv[1];

        if (check_length(chars) == 1)
        {
            return check_length(chars);
        }
        else if (check_rc(chars) == 1)
        {
            return check_rc(chars);
        }
        else if (check_alpha(chars) == 1)
        {
            return check_alpha(chars);
        }
    }


    string ptext;

    ptext = get_string("Input Text: \n");

}

int check_rc(string chars)
{
    for (int i = 0, n = strlen(chars); i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (!(i == j))
            {
                if (chars[i] == chars[j])
                {
                    printf("Key must not contain repeated characters. \n");
                    return 1;
                }
            }
        }
    }
    return 0;
}

int check_alpha(string chars)
{
    for (int i = 0, n = strlen(chars); i < n; i++)
    {
        if (isdigit(chars[i]))
        {
            printf("Key must only contain alphabetic characters. \n");
            return 1;
        }
    }
    return 0;
}

int check_length(string chars)
{
    int charLength = strlen(chars);

    if( charLength !=26)
    {
        printf("Key must contain 26 characters.\n");
        return 1;
    }
    return 0;
}

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Ваш вопрос трудно понять, но я предполагаю, что если вы хотите уменьшить количество небезопасных проверок, вы можете применить концепцию оценки короткого замыкания &&

, иначе вы просто не сможете использовать (иначе, если ). и используйте вместо него 3 оператора if.

все последующие (else if) пропускаются, если один из операторов if до того, как он стал истинным.

надеюсь, это поможет.

0 голосов
/ 21 июня 2020

Вы можете сохранить возвращаемое значение в локальной переменной и использовать его полностью:

int check_rc_val = check_length(chars);
if (check_rc_val == X)
{
    return check_rc_val;
}

int check_rc_val = check_rc(chars);
if (check_rc_val == Y)
{
    return check_rc_val;
}

int check_alpha_val = check_alpha(chars);
if (check_alpha_val == Z)
{
    return check_alpha_val;
}
...