实现三位数数学性质判断的C程序执行if语句后崩溃,求排查解决
问题分析与修复
你的程序崩溃的核心原因是除零错误:当计算得到的suma = x² + y² - z²等于0时,执行n % suma就会触发除以0的非法操作,这在C语言中属于未定义行为,直接导致程序崩溃,且编译器无法提前预判这种运行时数值问题,所以不会给出警告。
修复方案
在执行取模操作前,先判断suma是否不等于0,只有满足这个前提时,再进行n % suma == 0的判断。
修改后的代码如下:
#include <stdio.h> #include <stdlib.h> int main() { int n, i; printf("n: "); scanf("%d", &n); for (i = 100; i <= 999; i++) { int x = i / 100; int y = i / 10 % 10; int z = i % 10; int suma = x * x + y * y - z * z; // 先排除除零情况,再执行取模判断 if (suma != 0 && n % suma == 0) printf("%d %d %d %d\n", i, x, y, z); } return 0; }
额外优化提示
可以给输入环节增加合法性检查,避免用户输入非整数导致的后续逻辑异常:
if (scanf("%d", &n) != 1) { printf("输入无效,请输入整数\n"); return 1; }
内容的提问来源于stack exchange,提问作者Pocsi Nandor-Szilveszter
相关产品推荐
相关产品推荐

