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

#include <stdio.h> int main() { int n, len = 0; char s[1001] = {0}, b[1001] = {0}; scanf("%d", &n); fgets(s, sizeof(s), stdin); for (int i = 0; s[i] != '\0'; i++) { len++; } if (n > len) { printf("%d", n % len); return 0; } int size = n; for (int i = 0; s[i] != '\0'; i++) { if(n!=0){ b[i]=s[len-n]; n--; }else{ b[i]=s[i-size]; } } for (int i = 0; b[i] != '\0'; i++) { printf("%c", b[i]); } return 0; }
这段代码试图实现字符串的循环右移功能,但存在几个问题。代码首先读取一个整数n和一个字符串s,然后尝试将字符串s循环右移n位,结果存入b并输出。

- 代码中`fgets`会读取上一行输入后的换行符,导致字符串s的第一个字符是换行符,这会影响后续所有逻辑。
- 循环右移的实现逻辑有误,当n大于字符串长度时,虽然用`n % len`处理了,但后续循环中n被修改,导致索引计算混乱。
- 循环中`n`被递减,但后续又用`i-size`访问,导致数组越界或错误赋值。

- 检查`fgets`读取后字符串的实际内容,考虑如何跳过换行符。
- 重新思考循环右移的索引映射:对于位置i,应该从原字符串的哪个位置取字符?注意n可能大于len的情况。