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

#include <stdio.h> int main() { char s[1001], t[1001]; int len = 0; int n = 0; 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]) { int x=1; x++; printf("%c%d",s[i]x) } } return 0; }
这段代码试图实现一个字符串压缩功能,将连续重复的字符压缩成“字符+重复次数”的形式。但目前代码存在多个问题,无法正确运行。

- 第一个while循环读取输入的方式有问题。它用getchar逐个读取字符,但之后又用scanf读取同一行输入,导致s数组的内容被覆盖,而且n的值与最终s的长度不一致。
- 第二个while循环中,当s[i+1]不等于s[i]时,你直接打印字符,但缺少对连续重复字符的计数逻辑。当s[i+1]等于s[i]时,你试图计数,但x每次都被重置为1,无法累计重复次数,而且printf语句缺少逗号,语法错误。

提示:
- 思考如何用一个循环遍历字符串,同时记录当前字符和它的重复次数。当遇到不同字符时,再输出当前字符和次数。
- 注意输入方式的选择:要么用getchar循环读取,要么用scanf读取一行,不要混用。同时要确保字符串末尾有结束符'\0'。