在线编译器 C

#include <stdio.h> int main() { char c; int a[200]={0}; int i=0; while((c=getchar())!=EOF){ a[i]=c; } for(int i=0;a[i]!='\n';i++){ printf("%c",a[i]); } return 0; }
这段代码试图从标准输入读取字符并存入数组,然后输出到换行符为止。但存在几个问题。

- 循环中变量 `i` 没有递增,导致所有字符都存入 `a[0]`,数组其他位置未被使用。
- 读取字符时用 `char` 类型存储 `getchar()` 的返回值,但 `EOF` 是 `int` 类型,用 `char` 可能无法正确判断文件结束。
- 输出循环的条件 `a[i]!='\n'` 可能永远不成立,因为数组中没有存储换行符,且 `a[0]` 以外的元素都是初始值0。

- 检查读取循环中 `i` 是否在每次读取后增加。
- 思考如何正确判断输入结束,以及输出循环的终止条件应该基于什么。