Online Compiler C

#include <stdio.h> int main() { long long c; double average=0,sum=0,i=0; while (scanf("%lld",&c)){ sum=sum+c; i++; } average=sum/i; printf("%.2f",average); return 0; }
这段代码试图从输入中读取一系列整数,计算它们的平均值并保留两位小数输出。但存在一个关键问题:循环条件 `while (scanf("%lld",&c))` 会在遇到非数字输入或文件结束时继续尝试读取,导致无法正确终止循环。

- 当 `scanf` 读取失败(例如输入了字母或到达文件末尾)时,它会返回0或EOF,但你的循环条件只检查了返回值是否为真(非零),这会导致在输入结束时陷入无限循环,因为失败后的 `scanf` 不会改变 `c` 的值,且会持续返回0。
- 你需要明确判断 `scanf` 的返回值是否等于成功读取的项目数(这里是1),而不是简单地检查返回值是否为真。例如,当 `scanf` 返回1时才继续循环,否则退出。