Online Compiler C

#include <stdio.h> enum {size = 1001}; void hhh(char a[size]) { char first = a[0]; int len = 0; while(a[len] != '\0') { a[len] = a[len+1]; len++; } a[len -1] = first; } int main() { long long int k, lon = 0; char a[1001]; scanf("%lld", &k); scanf("%[^\n]", a); int p = 0; while(a[p] != '\0' ) { lon++; p++; } if(k > lon) { k = k % lon; } for(int i = 0; i< k; i++) { hhh(a[size]); } for(int i = 0; i< lon; i++) { printf("%c", a[i]); } return 0; }
这段代码试图实现一个字符串循环左移的功能,但存在几个问题。

代码中定义了一个函数 `hhh`,它把字符串的第一个字符移到末尾,实现一次左移。主函数中读取一个整数 `k` 和一个字符串,然后对字符串执行 `k` 次左移操作,最后输出结果。

- 在 `main` 函数中调用 `hhh(a[size])` 是错误的。`a[size]` 表示数组 `a` 中索引为 `size` 的元素,而不是整个数组。你应该直接传递数组名 `a`。
- `scanf("%[^\n]", a)` 会读取直到换行符的所有字符,但前面 `scanf("%lld", &k)` 读取整数后,输入缓冲区中会留下一个换行符,导致 `%[^\n]` 直接匹配到空字符串。你需要处理这个换行符。