当我输入一个十进制而不是一个int到“scanf(”%i“,&int)”时,会发生什么?

我的程序提示用户输入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  int main(void) { int count, value; double avg, sum; count = 0; sum = 0; avg = 0; while (count = 0) { sum = sum + value; count = count + 1; } else { printf("value must be positive"); } } avg = sum / count; printf("Average is %lf\n ", avg); return 0; } 

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

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

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