在线编译器 C

#include <stdio.h> int main() { char s[1001]; int n = 0; int x = 1; while ((s[n] = getchar()) != EOF) { n++; } scanf("%[^\n]", s); for (int i = 0; i < n-1; i++) { while (s[i + 1] == s[i]) { x++; i++; } while (s[i + 1] != s[i]) { i++; } if (x == 1) printf("%c", s[i]); else printf("%c%d", s[i], x); } return 0; }
这段代码试图实现一个简单的游程编码(Run-Length Encoding),但存在几个问题。代码先尝试用 `getchar()` 读取输入到数组 `s`,然后又用 `scanf` 读取,导致逻辑混乱。同时,循环中的 `while` 嵌套和变量 `x` 的复位也有问题。

- 第一个 `while` 循环用 `getchar()` 读取输入,但之后又用 `scanf` 覆盖了数组内容,导致 `n` 的值与最终数组内容不匹配。你应该只选择一种输入方式,并确保 `n` 正确记录实际读取的字符数。
- 在压缩循环中,变量 `x` 只在遇到重复字符时增加,但遇到不同字符时没有重置为1,导致后续计数错误。你需要在内层循环结束后,将 `x` 重置为1,再继续处理下一个字符。