我正在尝试编写一个递归函数来检查用户是否输入了包含所有偶数位的数字。
我的逻辑出了什么问题?当我尝试使用“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);
}
}
}
答案 0 :(得分:5)
allEven((number / 10), &result);
应替换为
allEven((number / 10), result);
因为allEven
期望类型为int *
且&result
的第二个参数为int **
同样int *result
应为int result = 1
如果您使用正确的警告标记-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;