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

#include <stdio.h> int main() { char m[1001]; char a; int sum=0,t=0; while(scanf("%c",&a)){ 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; }
这段代码试图读取输入字符并反转输出,但存在几个问题。

代码使用 `while(scanf("%c",&a))` 循环读取字符,但 `scanf` 返回成功读取的项数,当遇到文件结束符(EOF)时会返回 -1 或 0,循环不会正确终止。同时,`sum` 和 `t` 都用于计数,但逻辑重复。反转部分正确,但输入读取方式导致程序可能无法按预期结束。

- 检查循环条件:`scanf` 返回值为 1 表示成功读取一个字符,但遇到 EOF 时返回 -1,循环会继续执行,导致数组越界或无限循环。考虑如何正确检测输入结束。
- 注意 `sum` 的初始值和递增:每次读取字符后 `sum` 和 `t` 都增加,但反转时使用 `sum` 作为长度,而 `sum` 在循环结束后比实际字符数多 1(因为最后一次读取失败时 `sum` 仍会递增)。思考如何准确记录有效字符数量。