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

#include<stdio.h> int num(char *s){ int sum=0; while(*s!='\0'){ sum++; s++; } return sum; } void same(char *s,int x){ int number=num(s); char b[1000]={0}; x=x%number; for(int i=0;i<number;i++){ if(i + x < number) b[(x+i)%number]=s[i]; else { b[(x+i)%number]=s[i]; } } // for (int i=x;i<x+number;i++){ // printf("%c",b[i]); // } for (int i=0;i<number;i++){ s[i]=b[i]; } } int main(){ char m[1000]; int x; scanf("%d%[^\n]",&x,m); //num(m); //fgets(m,sizeof(m),stdin); //char c; // false skip //int now=-1; // while((c=getchar())!=EOF && c!='\n'){ //m[++now]=c; //} same(m,x); printf("%s", m); return 0; }
这段代码试图实现一个字符串循环右移的功能,但存在几个问题。

代码首先计算字符串长度,然后根据输入的数字x取模,最后将字符数组中的字符循环移动到新位置。主函数中通过scanf读取数字和字符串,但读取方式有问题。

- 主函数中的scanf格式`"%d%[^\n]"`会导致数字读取后,字符串读取时可能包含前导空格或换行符,导致字符串读取不正确。建议检查输入读取的方式。
- 在same函数中,循环内的条件判断`if(i + x < number)`和`else`分支执行了完全相同的赋值操作,这个条件判断没有实际作用。需要重新思考如何正确地将字符从原位置移动到目标位置。