Online Compiler C

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

首先,循环条件中使用了 `getchar()` 读取字符,但循环体内又用 `scanf` 再次读取,这会导致每次循环实际上读取两个字符,其中一个被丢弃。同时,`c` 被声明为 `char` 类型,而 `getchar()` 返回 `int`,无法正确检测 `EOF`。

其次,数组 `a` 没有初始化,存储的字符可能包含随机值,输出时用 `'\0'` 判断不可靠。

- 检查循环读取逻辑:你只需要一种读取字符的方式,要么用 `getchar()`,要么用 `scanf`,不要同时使用。
- 考虑如何正确判断输入结束:`getchar()` 返回 `int` 类型,需要将 `c` 声明为 `int` 才能正确比较 `EOF`。