Online Compiler C

#include <stdio.h> #include <string.h> int main() { int k,n ; char s[1001]; scanf("%d",&k); gets(s); n=strlen(s); k%=n; printf("%s%s",s+n-k,s); return 0; }
这段代码试图将输入的字符串循环右移k位,但存在几个问题。

- 代码使用了`gets(s)`来读取字符串,但`gets`函数不安全且已被废弃,同时它会在读取整数后读取换行符,导致字符串读取为空。
- 循环右移的逻辑有误:`printf("%s%s",s+n-k,s)` 中`s+n-k`指向了字符串末尾附近,但`s`本身没有以空字符结尾的截断,会导致输出混乱。

- 检查输入读取的顺序:`scanf`读取整数后,缓冲区会留下换行符,`gets`会直接读取这个换行符,导致字符串为空。
- 思考循环右移的正确实现:需要将字符串的后k个字符放到前面,前n-k个字符放到后面,但要注意字符串的结束符位置。