在线编译器 C

#include <stdio.h> int main() { int a[200]; char c; int i=0; while((c=getchar())!=EOF){ a[i]=c; i++; }a[i]='\0'; for(int i=0;i<200;i++){ if(a[i]!='\0'){ printf("%c",a[i]); } } }
这段代码从标准输入读取字符,存入整型数组,然后打印出来。但存在几个问题。

- 数组大小固定为200,如果输入超过199个字符(加上结束符),会导致数组越界。
- 变量 `c` 声明为 `char` 类型,但 `getchar()` 返回 `int` 类型,当遇到 EOF 时,`char` 可能无法正确存储 EOF 值(特别是如果 `char` 是无符号类型时)。
- 循环条件 `while((c=getchar())!=EOF)` 中,`c` 是 `char`,比较前会被转换为 `int`,但若 `char` 是无符号类型,EOF(-1)会被转换为正数,导致循环永不结束。
- 最后的打印循环遍历整个200个元素,效率较低,且如果中间有 `'\0'` 字符(实际输入中可能出现),会提前停止打印。