在线编译器 C

#include <stdio.h> int main() { char s[1001], t[1001]; int len = 0; int n = 0; int x=1; while ((s[n] = getchar()) != EOF) { n++; } scanf("%[^\n]", s); for (int i = 0; i < n; i++) { while (s[i + 1] != s[i]) { printf("%c",s[i]);} while (s[i + 1] == s[i]) { x++; i++; } printf("%c%d",s[i],x); } return 0; }
这段代码试图实现一个简单的“游程编码”(Run-Length Encoding),即把连续相同的字符压缩成“字符+重复次数”的形式。但代码中存在多个逻辑错误。

- 代码先尝试用 `getchar()` 读取输入到数组 `s`,但紧接着又用 `scanf` 读取,导致第一次读取的数据被覆盖,且 `n` 的值可能不正确。
- 内层 `while` 循环的条件和逻辑有误:当 `s[i+1] != s[i]` 时,你只打印了字符,但没有处理重复次数;而当相等时,你累加 `x` 并跳过字符,但最后打印时 `x` 可能包含了之前不连续字符的计数。
- 变量 `x` 没有在每次遇到新字符时重置,导致计数会不断累加。

- 检查输入读取方式:你只需要一种方式读取一行字符串,例如只用 `fgets` 或 `scanf`,不要混用。
- 思考如何正确统计连续相同字符的个数:当遇到新字符时,先打印前一个字符及其计数,然后重置计数器。注意循环的边界条件,避免数组越界。