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

C语言循环次数异常:输入n个数求平均值程序循环无法终止

问题分析与解决

嘿,我一眼就揪出问题啦!你的循环停不下来是因为for循环的条件写错了,另外还有几个小细节需要修正,咱们一步步理清楚:

1. 循环条件的致命错误

你写的for (i = 0; i = n; i++)里,i = n是赋值操作,不是比较操作!这会把n的值直接赋给i,而这个表达式的结果就是n的数值(只要n是正整数,结果就为真),所以循环会一直无限执行下去。

正确的条件应该是比较i和n的大小,比如用i < n(让i从0跑到n-1,刚好循环n次),或者i <= n-1,效果完全一致。

2. 未初始化的变量

你声明了float sub, k;,但k没有初始值就直接用来累加:k = k + sub;。这会触发未定义行为,最后累加出来的结果会是随机的垃圾值。所以一定要把k初始化为0.0,改成float sub, k = 0.0;。

3. 输入格式不匹配

sub是float类型,但你用了scanf("%d", &sub);——%d是读取整数的格式符,读取浮点数应该用%f,不然会导致输入解析错误,直接影响后续计算结果。

4. 补充平均值计算逻辑

你的代码最后没写完,循环结束后需要计算平均值并输出,这一步可不能忘!


修正后的完整代码

#include <stdio.h>

int main() {
    int i, n;
    float sub, k = 0.0; // 初始化k为0.0,避免垃圾值
    float avg;

    printf("Give a positive number\n");
    scanf("%d", &n);

    // 严格拦截非正整数输入
    while (n <= 0) {
        printf("Wrong number try again\n");
        scanf("%d", &n);
    }

    // 修正循环条件,确保执行n次
    for (i = 0; i < n; i++) {
        printf("Give a number\n");
        scanf("%f", &sub); // 用%f匹配float类型输入
        k = k + sub;
    }

    // 计算并输出平均值,保留两位小数更直观
    avg = k / n;
    printf("The average is: %.2f\n", avg);

    return 0;
}

我还帮你把输入验证的条件改成了n <= 0,这样连0也会被拦截,更符合“正整数”的要求~

内容的提问来源于stack exchange,提问作者Dan Boutsi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:32:20