Online Compiler C

#include <stdio.h> int main() { char c; long long average=0,sum=0,i=0; while ((c=getchar())!=0){ sum=sum+c; i++; } average=sum/i; printf("%lld",average); return 0; }
这段代码试图从标准输入读取字符,计算所有字符的ASCII码平均值,并输出整数平均值。但存在几个问题。

- 循环条件 `(c=getchar())!=0` 有问题。`getchar()` 返回 `int` 类型,文件结束时会返回 `EOF`(通常是 -1),而不是 0。所以循环不会在文件结束时停止,而且 `c` 被声明为 `char` 类型,可能无法正确存储 `EOF` 的值。
- 平均值计算 `average=sum/i` 是整数除法,会截断小数部分,但题目可能期望浮点数结果?另外,`average` 和 `sum` 都是 `long long`,但 `i` 是 `long long`,除法结果会取整。
- 变量 `c` 应该用 `int` 类型来接收 `getchar()` 的返回值,以便正确判断 `EOF`。

- 检查循环条件,思考如何正确判断输入结束(例如使用 `EOF`)。
- 考虑平均值是否需要保留小数部分,如果需要,应该使用浮点数类型。