首页 > 解决方案 > 如何在 if 语句中检查函数返回值而不调用它

问题描述

我试图在 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;
}

标签: cfunctioncs50

解决方案


您的问题很难理解,但我假设如果您想减少不必要的检查量,您可以应用 && 的短路评估概念

或者你不能使用(否则)。并改用 3 if 语句。

如果之前的 if 语句之一为真,则所有后续(else if)都将跳过。

希望这有帮助。


推荐阅读