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

时间:2015-02-25 07:26:23

标签: 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);
        }
    }
}

3 个答案:

答案 0 :(得分:5)

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

allEven((number / 10), result);

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

同样int *result应为int result = 1

Working example here

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

答案 1 :(得分: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);

}

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

2)" allEven((数字/ 10),&结果)"调用main()替换为allEven((数字/ 10),结果)

3)你在allEven函数中错过了一个大括号

答案 2 :(得分:0)

替换

int *result;

使用

int result;