为什么不使用double函数中声明的数字?(C) #包括 双重计算平均值(整数) { 静态int numberInput=0;//计数器 静态整数和=0; 总和=总和+数字输入; numberInput++; 返回和/数字输入; //计算并返回到目前为止的平均值。 } 内部主(空) { 双倍平均; 而(1) { 整数; scanf(“%d”和编号); 如果(数字==0) break;//如果number==0,则停止 其他的 平均值=计算平均值(数字); } printf(“%.1f\n”,平均值); 返回0; }
正如我个人所说,函数试图计算平均值。但是为什么主函数不在calculate_average函数中使用为什么不使用double函数中声明的数字?(C) #包括 双重计算平均值(整数) { 静态int numberInput=0;//计数器 静态整数和=0; 总和=总和+数字输入; numberInput++; 返回和/数字输入; //计算并返回到目前为止的平均值。 } 内部主(空) { 双倍平均; 而(1) { 整数; scanf(“%d”和编号); 如果(数字==0) break;//如果number==0,则停止 其他的 平均值=计算平均值(数字); } printf(“%.1f\n”,平均值); 返回0; },c,C,正如我个人所说,函数试图计算平均值。但是为什么主函数不在calculate_average函数中使用number?如前所述,您的calculate_average函数不使用其给定的number参数,因为在该函数的任何地方,您都没有指示它这样做。最可能的情况是,您的sum=sum+numberInput应该是sum=sum+number(从而将给定的数字添加到运行总数中) 还有几点: 你应该初始化你的average变量(到0.0),否则如果你给你的程序一个空列表(即第一个条目为零),你会得到一个疯
number
?如前所述,您的calculate_average
函数不使用其给定的number
参数,因为在该函数的任何地方,您都没有指示它这样做。最可能的情况是,您的sum=sum+numberInput
应该是sum=sum+number代码>(从而将给定的数字添加到运行总数中)
还有几点:
你应该初始化你的average
变量(到0.0),否则如果你给你的程序一个空列表(即第一个条目为零),你会得到一个疯狂的结果
由于函数返回一个double
,因此最好将sum
变量也作为double
;否则,您将在计算中执行整数算术,所有返回值将被截断为整数(丢失任何小数部分)
其他人可能会指出,您应该始终检查scanf
调用返回的值(如果读取操作成功,则返回值为1
),并添加代码以处理任何错误;然而,在这里解决这一点,IMHO,超出了这个问题的“范围”,但要注意
以下是一个可能的工作版本:
#包括
双重计算平均值(整数)
{
静态int numberInput=0;//计数器
静态双和=0.0;
总和=总和+数字;
numberInput++;
返回和/数字输入;
//计算并返回到目前为止的平均值。
}
内部主(空)
{
double average=0.0;//初始化变量总是最好的!
而(1){
int getal;
scanf(“%d”和“getal”);
如果(getal==0)
break;//如果getal==0,则停止
其他的
平均值=计算平均值(getal);
}
printf(“%.1f\n”,平均值);
返回0;
}
请随时询问任何进一步的解释和/或澄清。您是如何确认这一点的?您是否意识到sum/numberInput
是整数除法,将向0取整?函数试图返回double
的事实太晚了。“调用号码”是什么意思?你认为到底遗漏了什么?不清楚。你给这个程序什么输入?它能产生什么样的产出?为什么这是错误的?包括样本输入、期望输出、当前输出和差异/问题的描述。我很欣赏答案,这对理解错误有很大帮助。整个问题实际上是我完全破坏的总和计算。因此,修正值确实是sum=sum+number;第3点非常重要——编写时,如果用户在任意点输入非数字(非空白)字符,代码可能会挂起(进入无限循环)。不好的。如果(scanf(“%d”,&getal)!=1)中断,则至少会更好
至少会终止无效(非数字)输入的循环。哇,我刚刚检查过。它确实使它变得无限。谢谢“我现在必须注意这些类型的事情了。”“真奇怪。但是链接的答案(某种程度上)解决了这个问题,我真的不想重复其他SO帖子(我肯定有一些)。@Heekoscanf
系列函数的主要目标似乎是“绊倒”C初学者(和其他人)