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

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

代码使用 `scanf("%s",&a)` 读取字符,但 `a` 是 `char` 类型,而 `%s` 格式说明符需要 `char*` 指向字符数组,这会导致未定义行为。同时循环条件 `while(scanf(...))` 在遇到文件结束时会返回 `EOF`(负数),但 `scanf` 也可能返回成功匹配的项数,逻辑不清晰。

- 检查 `scanf` 的格式说明符和参数类型是否匹配。`%s` 用于读取字符串,而 `%c` 用于读取单个字符。
- 思考循环终止条件。`scanf` 返回 `EOF` 表示输入结束,但你的循环没有正确处理这种情况,可能导致无限循环或错误计数。