递归函数,用于检查int变量中的所有数字是否均匀

Gav*_*vin 5 c recursion

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

我的逻辑出了什么问题?当我尝试使用"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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Moh*_*ain 5

allEven((number / 10), &result); 应该换成

allEven((number / 10), result);
Run Code Online (Sandbox Code Playgroud)

因为allEven期望类型的第二个参数int *&resultint **

int *result应该是int result = 1

这里的工作示例

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


ars*_*ars 3

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

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);

}
Run Code Online (Sandbox Code Playgroud)

1) 将“int* result”替换为“int result”

2) main() 中的“allEven((number/10), &result)”调用替换为 allEven((number/10), result)

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