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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:07:16