我的程序提示用户输入20个整数值,然后计算这些值的平均值。 我输入了以下内容:3.5,6,9,12,15,18,21,24,1000,4500,900,7,8,2,12,5,4,3,2,1
除第一个数字外,所有都是整数值,但程序告诉我平均值是3.000000。为什么会发生这种情况?我解释的最大原因是我对每个值的scanf函数提示输入一个整数,因此输入3.5将四舍五入为3或4,但仍然没有解释结果均值为3.000000。
#include <stdio.h>
int main(void) {
int count, value;
double avg, sum;
count = 0;
sum = 0;
avg = 0;
while (count < 20) {
printf("Enter a positive integer\n");
scanf("%i", &value);
if (value >= 0) {
sum = sum + value;
count = count + 1;
}
else {
printf("value must be positive");
}
}
avg = sum / count;
printf("Average is %lf\n ", avg);
return 0;
}
答案 0 :(得分:2)
当您要求scanf
读取整数时,它会读取数字,直到找到一个非数字字符。在这种情况下,小数点分隔符.
。
小数分隔符及其后的所有内容都将保留在输入缓冲区中。如果你试图在循环中读取整数,这将导致问题,因为下一次调用scanf
将看到点并认为没有输入整数而没有读取任何东西,这留下了下一次迭代的点循环,等等,永远。
如果这些数字中的任何一个可能是浮点值,则应将 all 读作浮点值。