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
相关产品推荐
相关产品推荐

