检查 int 变量中的所有数字是否为偶数的递归函数

Recursive function to check if all digits in an int variable are even

我正在尝试编写一个递归函数来检查用户输入的数字是否包含所有偶数位。

我的逻辑有什么问题?当我尝试使用“556”时,结果是 1.

int main()
{
    int num;
    int *result;
    printf("Enter a number: ");
    scanf("%d", &num);
    allEven(num, &result);
    printf("allEven(): %d", result);

}
void allEven(int number, int *result)
{
    if ((number % 10) % 2) // if the last digit is odd
    {
        *result = 0;
    }
    else
    {
        *result = 1;
        if ((number / 10) != 0) //not the last digit to evaluate, we call the function again.
        {
            allEven((number / 10), &result);
        }
    }
}

替换

int *result;

int result;

allEven((number / 10), &result); 应替换为

allEven((number / 10), result);

因为 allEven 需要 int * 类型的第二个参数,而 &resultint **

另外int *result应该是int result = 1

Working example here

如果您使用正确的警告标志 -W -Wall 进行编译,例如在 gcc 上(最好使用 -O2),您应该会收到正确的警告以更正您的代码。

你应该这样写来编译代码:

void allEven(int number, int *result)
{
    if ((number % 10) % 2) // if the last digit is odd
    {
        *result = 0;
    }
    else
    {
        *result = 1;
        if ((number / 10) != 0) //not the last digit to evaluate, we call the function again.
        {
            allEven((number / 10), result);
        }
    }
}
int main()
{
    int num;
    int result;
    printf("Enter a number: ");
    scanf("%d", &num);
    allEven(num, &result);
    printf("allEven(): %d", result);

}

1) "int* result" 替换为 "int result"

2) "allEven((number/10), &result)" 调用 main() 替换为 allEven((number/10), result)

3) 你在 allEven 函数中漏掉了一个大括号