Онлайн компилятор C

#include <stdio.h> int main() { char m[1001]; char a; int sum=0,t=0; while(scanf("%c",&a)){ if(a!='\0'){ m[t]=a; sum++; t++;} } for(int i=0;i<sum/2;i++){ int temp=m[sum-i-1]; m[sum-i-1]=m[i]; m[i]=temp; } m[sum]='\0'; printf("%s",m); return 0; }
这段代码试图读取输入字符并反转输出,但存在几个问题。

代码使用 `scanf("%c",&a)` 循环读取字符,但循环没有终止条件,会一直读取。同时,`if(a!='\0')` 这个判断永远不会成立,因为 `scanf` 不会读取到空字符,而是会读取到换行符或文件结束符。另外,`sum` 和 `t` 同时递增,实际上只需要一个计数器。

- 循环条件 `while(scanf("%c",&a))` 会一直为真,因为 `scanf` 返回成功读取的项数(1),除非遇到文件结束。你需要一个明确的终止条件,比如读取到换行符时停止。
- 判断 `if(a!='\0')` 没有意义,因为 `scanf` 不会产生空字符。你应该检查读取到的字符是否为换行符 `'\n'` 或文件结束符 `EOF`,来决定何时停止读取。