GCD程序执行异常排查:代码无法输出结果及处理逻辑块
你的GCD程序无法正常运行的问题分析与修复
核心问题及修复方案:
scanf格式错误导致输入阻塞:
scanf("%d\n%d", &a, &b);中的\n完全多余。scanf会自动跳过输入中的空白字符(换行、空格等),显式添加\n会让程序在读取两个整数后,还等待额外的空白输入才会继续执行,直接卡住了后续逻辑的运行。将格式字符串改为"%d %d"即可解决输入阻塞问题。除零运算触发程序异常:所有循环的起始值是
i=0,当i=0时,a%i和b%i属于除零操作,这是C语言中的未定义行为,会导致程序直接崩溃或终止,根本无法走到后续的判断、循环和printf语句。循环应从i=1开始,因为1是所有正整数的公约数。未初始化变量导致输出异常:
temp未初始化,若程序因前面的错误提前终止,或循环未正确赋值,temp会是垃圾值,即使走到printf也会输出错误结果。建议初始化temp为1。
修正后的代码:
#include <stdio.h> int main() { int a, b; printf("Enter the nos for gcd: "); scanf("%d %d", &a, &b); int temp = 1; int min = a < b ? a : b; // 合并冗余逻辑,直接遍历到较小值 for (int i = 1; i <= min; i++) { if ((a % i == 0) && (b % i == 0)) { temp = i; } } printf("Gcd for %d and %d is: %d\n", a, b, temp); return 0; }
内容的提问来源于stack exchange,提问作者Ashutosh kumar
相关产品推荐
相关产品推荐

