当我输入小数而不是int来输入" scanf("%i",& int)"?

时间:2016-11-22 10:53:32

标签: c int scanf

我的程序提示用户输入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;
}

1 个答案:

答案 0 :(得分:2)

当您要求scanf读取整数时,它会读取数字,直到找到一个非数字字符。在这种情况下,小数点分隔符.

小数分隔符及其后的所有内容都将保留在输入缓冲区中。如果你试图在循环中读取整数,这将导致问题,因为下一次调用scanf将看到点并认为没有输入整数而没有读取任何东西,这留下了下一次迭代的点循环,等等,永远。

如果这些数字中的任何一个可能是浮点值,则应将 all 读作浮点值。