Online Compiler C

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

- 代码中先使用 `scanf("%c",&c)` 读取了一个字符,但随后在 `while` 循环中又用 `getchar()` 读取,导致第一个字符被丢弃,且循环条件 `(c=getchar())` 在遇到文件结束符时会返回 `EOF`(通常为-1),这会被当作有效字符累加,导致结果错误。
- 变量 `sum` 和 `average` 没有初始化,它们的初始值是不确定的,会导致累加结果异常。
- 计算平均值时使用整数除法,会丢失小数部分,且 `sum/i` 可能因为类型转换问题得到错误结果。

- 检查循环条件:`getchar()` 在读取到文件结束符时返回 `EOF`,而 `EOF` 是一个负数,在 `while` 条件中会被当作“真”,导致循环继续。你需要考虑如何正确判断输入结束。
- 确保所有变量在使用前都有明确的初始值,比如将 `sum` 和 `i` 初始化为0。