C语言阶乘计算器开发:scanf持续接收输入无法停止的问题求助
阶乘计算器死循环问题排查与修复
嘿,我一眼就发现你代码里的关键问题啦!程序卡住根本不是scanf的锅,问题出在for循环的条件判断上,另外还有个边界情况需要处理,咱们一步步说:
1. 死循环的根本原因:错误的循环条件
你写的循环条件是i = 1,这是一个赋值语句,不是比较判断!它会把1赋值给i,而这个表达式的返回值永远是1(在C里非0即真),所以循环会无限执行下去——这就是输入数字后程序卡住、无法继续的原因。
正确的写法应该用比较运算符,判断i是否大于等于1,也就是把i = 1改成i >= 1(或者i > 0,效果一样)。
2. 边界情况的遗漏:0和1的阶乘
按照你的代码逻辑,如果输入0或者1,ans初始值就是0或1,但输入0时,i = num-1会变成-1,循环直接跳过,最终输出0! is 0,但实际上0的阶乘是1,这不符合数学定义。所以我们需要在计算前先处理这种特殊情况。
修正后的完整代码
#include <stdio.h> int main(int argc, char const *argv[]) { int num; int ans; printf("Enter any number: "); scanf("%d", &num); // 处理0和1的特殊情况 if (num == 0 || num == 1) { ans = 1; } else { ans = num; // 修正循环条件为比较判断 for (int i = (num-1); i >= 1; --i) { ans *= i; } } printf("%d! is %d \n", num, ans); return 0; }
额外提醒
还有个小细节:如果输入负数,阶乘是没有定义的,你可以再加个判断,提示用户输入非负整数,让程序更健壮~
内容的提问来源于stack exchange,提问作者Jere
相关产品推荐
相关产品推荐

