【问题标题】:What is happening when I input a decimal instead of an int to "scanf("%i", &int)"? [duplicate]当我在“scanf("%i", &int)" 中输入小数而不是 int 时会发生什么? [复制]
【发布时间】:2023-04-02 23:11:01
【问题描述】:

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

【问题讨论】:

  • 与您的问题无关,但为了您自己,您应该缩进您的代码。

标签: c int scanf


【解决方案1】:

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

小数点分隔符和它之后的所有内容都将留在输入缓冲区中。如果您尝试在循环中读取整数,这将导致问题,因为下一次调用 scanf 将看到点并认为没有输入整数并且没有读取任何内容,这会将点留给循环的下一次迭代,以此类推,直到永远。

如果这些数字中的任何一个可以是浮点值,您应该将全部读作浮点值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    相关资源
    最近更新 更多