Online Compiler C

#include <stdio.h> int main() { int a[200]; int 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,如果输入超过200个字符(包括末尾的'\0'),会导致数组越界,这是不安全的。
- 循环条件 `i<200` 会遍历整个数组,即使后面很多元素未使用,效率较低。更合理的方式是只遍历到实际存储的字符数。
- 在读取循环结束后,你手动添加了 `a[i]='\0'`,但此时 `i` 已经自增到下一个位置,所以这个 '\0' 实际上放在了最后一个有效字符的下一个位置。这会导致后续遍历时,最后一个有效字符之后立即遇到 '\0' 而停止输出,但你的遍历条件 `i<200` 会继续检查后面的元素,逻辑上没问题,但不够精确。