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

#include <stdio.h> #include <string.h> int is_number(char a) { int number = 0; if (a >= '2' && a <= '9') { number = 1; } return number; } void result(char s[]) { int i = 0; while (s[i] != '\0') { int number = is_number(s[i]); if (number) { int digit = s[i] - '0'; while (digit > 0) { printf("%c", s[i - 1]); digit--; } i++; } if (!number) { i++; if (s[i] == '\0') { printf("%c", s[i - 1]); } } } } int main(){ char a[1001]; scanf("%[^\n]", a); result(a); return 0; }
这段代码的目的是:读取一行字符串,然后对每个数字字符,将它前面的字符重复输出(数字的值)次。例如输入 "a3" 会输出 "aaa"。

代码中存在逻辑错误,导致输出结果不正确。

- 在 `result` 函数中,当遇到数字时,你打印了前一个字符若干次,但之后 `i++` 跳过了数字,接着又进入 `if (!number)` 分支,导致数字后面的字符被重复处理或遗漏。你需要重新考虑循环中索引的移动逻辑,确保每个字符只被处理一次。
- 当遇到非数字字符时,你只在下一个字符是字符串结尾时才打印它,这会导致普通字符被跳过。你应该在遇到非数字字符时立即打印它,而不是等到下一个字符才判断。