Online Compiler 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++){ 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; }
这段代码试图实现一个字符串循环右移的功能,但存在输入读取的问题。

代码中 `num` 函数计算字符串长度,`same` 函数将字符串循环右移 `x` 位。主函数中 `scanf` 的格式字符串 `"%d%[^\n]"` 存在问题:`%[^\n]` 会读取换行符之前的所有字符,但 `%d` 读取整数后,输入缓冲区中会留下一个换行符,导致 `%[^\n]` 可能读取不到预期的字符串。

- 检查 `scanf` 的格式字符串:`%d` 读取整数后,输入缓冲区中残留的换行符会影响后续的 `%[^\n]` 读取。考虑如何跳过这个换行符,或者改用其他输入方式。
- 注意 `same` 函数中的取模运算 `x=x%number`,如果 `number` 为 0(空字符串),会导致除零错误。虽然题目可能不会输入空字符串,但这是一个潜在风险。