Онлайн компилятор 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]); } } }
这段代码试图从输入读取字符并存储到数组中,然后输出。但存在几个关键问题。

- 第一个while循环的条件 `(c=getchar()!=EOF)` 有运算符优先级问题,`!=` 优先级高于 `=`,实际效果是 `c = (getchar() != EOF)`,即c被赋值为0或1,而不是读取的字符。
- 循环内部又用 `scanf("%c",&c)` 读取字符,这会导致每次循环读取两个字符(一个被getchar丢弃,一个被scanf读取),并且覆盖了之前c的值。
- 数组a没有初始化,后续判断 `a[i]!='\0'` 可能不可靠,因为未初始化的元素值不确定。
- 循环条件 `i<200` 没有限制实际读取的字符数,如果输入超过200个字符会越界。

- 检查while循环条件中的运算符优先级,确保正确读取字符。
- 思考如何只用一个输入函数读取字符,并正确存储到数组中,同时避免越界。