You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言testDivisible函数每次执行返回不同结果的逻辑问题求助

问题根因

  • 局部变量未初始化
    你在testDivisible函数中定义的checker变量没有赋初始值,C语言中函数内的栈局部变量不会被自动初始化为0,初始值为对应内存地址的随机残留值。你每次执行checker = checker + 1都是在随机值的基础上累加,所以函数返回值每次运行都不固定,出现你看到的异常大数字、负数。
    解决方式:定义时直接初始化checker为0即可:int checker = 0;

  • 判断逻辑错误
    你的需求是检测数字是否能被2到10的所有数整除,checker统计的是输入数字能被2-10整除的次数,2到10共9个数字,只有当checker等于9时才满足需求,你当前主函数中x>0就判断为能被整除的逻辑完全错误,同时和你代码里写的注释逻辑也完全相反。

修正后完整代码

#include <stdio.h>

int testDivisible(int a) {
    // 初始化计数器为0
    int checker = 0;
    for (int i=2; i<=10; i++) {
        if (a % i == 0) {
            checker++;
        }
    }
    // 能被2-10所有数整除时返回1,否则返回0
    return checker == 9 ? 1 : 0;
}

int main() {
    int userInput;
    printf("Enter number: ");
    scanf("%d", &userInput);
    int x = testDivisible(userInput);
    if (x == 1) {
        printf("能被1到10整除\n");
    } else {
        printf("不能被1到10整除\n");
    }
    printf("%d\n", userInput);
    printf("%d", x);
    return 0;
}

内容的提问来源于stack exchange,提问作者Luigi Chan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 15:48:03