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
相关产品推荐
相关产品推荐

