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

C语言循环后变量重置问题:如何保留用户输入的初始n值

解决方法:保留初始输入的n值,避免循环修改原始变量

嘿,我完全懂你的困扰!你现在的问题是把n直接当成循环计数器用了,循环结束后它被减到0,不仅没法正确显示用户最初输入的条目数,还会导致sum/n触发除以0的错误——这确实是个常见的新手小坑😉

两种简单的修复方案:

方案1:新增一个计数器变量,保留原始n值

核心思路是用另一个变量来承担循环递减的工作,让n始终保存用户输入的初始值:

#include <stdio.h> 
int main(){ 
    int sum = 0; 
    int n; // 专门保存用户输入的初始数量
    int count; // 用来做循环计数器的临时变量
    int entered = 0; 

    printf("How many numbers to be summed up:"); 
    scanf("%d", &n); 
    count = n; // 把初始值复制给计数器

    // 用count递减,不修改原始的n
    for(; count > 0; count--){ 
        printf("Enter the number to be summed up:"); 
        scanf("%d", &entered); 
        sum += entered; 
    } 

    printf("Number of Entries:%d\nSum of the Entered numbers:%d\n", n, sum); 
    // 转换为浮点数计算平均值,避免整数除法丢失精度
    printf("Average:%.2f", (float)sum / n); 
    return 0; 
}

方案2:改用基于索引的for循环(更推荐)

直接用一个全新的循环变量i来计数,循环次数明确为n次,全程不碰原始的n变量,代码更直观:

#include <stdio.h> 
int main(){ 
    int sum = 0; 
    int n; 
    int entered = 0; 

    printf("How many numbers to be summed up:"); 
    scanf("%d", &n); 

    // 用i从0计数到n-1,循环n次,n保持不变
    for(int i = 0; i < n; i++){ 
        printf("Enter the number to be summed up:"); 
        scanf("%d", &entered); 
        sum += entered; 
    } 

    printf("Number of Entries:%d\nSum of the Entered numbers:%d\n", n, sum); 
    // 同样用浮点数计算平均值
    printf("Average:%.2f", (float)sum / n); 
    return 0; 
}

额外优化建议:

如果用户输入的n是0或者负数,程序会直接跳过循环,这时候sum/n还是会出问题。可以加个简单的判断来处理这种情况:

printf("How many numbers to be summed up:"); 
scanf("%d", &n); 
if(n <= 0){
    printf("Please enter a positive number!\n");
    return 1; // 退出程序
}

内容的提问来源于stack exchange,提问作者Kadir Dokur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:48:26