user-0 提问: 结果是对的，但运行后总是说段错误，真不知道是哪里的原因，哪位大佬帮帮忙，感谢!

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 谢谢，要是没有你们我又得卡死在这了

user: user-2
content: #include <stdio.h>   #include<string.h>   int main(int argc,char* argv[])  {       int i,len,n,k;     char str[1001] ;         scanf("%d%s",&n,str);     len=strlen(str);     k=n%len; //>=len的移动是重复的     /*题目所要求的移动是一种循环移动，如果把字符串首尾相连的话，就是起点位置的移动，可以直接循环输出*/     for (i=len-k;i<len+len-k;++i) 	{ 		printf("%c",str[i-(i>=len)*len]); //printf("%c",str[i%len]);              } 	printf("\n");       return 0 ;  }

user: user-2
content: 楼主的解法是可行的，只是效率低了点，数据输入是有些问题，主要是这一句while((a[j]=getchar())!=' ')键盘输入一般以回车结束应改为while((a[j]=getchar())!='\n')另外上机测试大部分是自动化脚本运行，数据从文件通过管道输入，输入结束多数是 eof ,这时要有对eof的检测，否则，会出问题，另外一点，对题目的理解，n 是非负整数，自然包括0,楼主忽略了对n=0的处理。 以下代码供参考  #include <stdio.h>  #include <stdlib.h>   int main(int argc,char* argv[])  {  int i,len,n,k; char arr[1000] ;  scanf("%d",&n);  i=0; while((isspace(arr[i]=getchar())!=0));//忽略一个或多个空白符，取得第一个有效字符 ++i; while(((arr[i]=getchar())!='\n')&&(arr[i]!=EOF)){++i;} //键盘输入用回车结束，数据从文件通过管道输入大部分以EOF结束 len=i;  k=n%len; //>=len的移动是重复的     /*题目所要求的移动是一种循环移动，如果把字符串首尾相连的话，就是起点位置的移动，可以直接循环输出*/     for (i=len-k;i<len+len-k;++i)     {         printf("%c",arr[i-(i>=len)*len]); //printf("%c",arr[i%len]);               }     printf("\n");     return 0 ;  }

user: user-3
content: 楼主的解法是可行的，只是没契合这题的要求而已，这题要求你用8#方法。

user: user-0
content: 引用 8 楼 jianyue---的回复: #include <stdio.h>   #include<string.h>   int main(int argc,char* argv[])  {       int i,len,n,k;     char str[1001] ;         scanf("%d%s",&n,str);     len=strlen(str);     k=n%len; //>=len的移动是重复的     /*题目所要求的移动是一种循环移动，如果把字符串首尾相连的话，就是起点位置的移动，可以直接循环输出*/     for (i=len-k;i<len+len-k;++i) 	{ 		printf("%c",str[i-(i>=len)*len]); //printf("%c",str[i%len]);              } 	printf("\n");       return 0 ;  }  额，能解释下我那个解法为什么不行吗？或者能行的能告诉我怎么修改吗？我挺

user: user-0
content: 引用 8 楼 jianyue---的回复: #include <stdio.h>   #include<string.h>   int main(int argc,char* argv[])  {       int i,len,n,k;     char str[1001] ;         scanf("%d%s",&n,str);     len=strlen(str);     k=n%len; //>=len的移动是重复的     /*题目所要求的移动是一种循环移动，如果把字符串首尾相连的话，就是起点位置的移动，可以直接循环输出*/     for (i=len-k;i<len+len-k;++i) 	{ 		printf("%c",str[i-(i>=len)*len]); //printf("%c",str[i%len]);              } 	printf("\n");       return 0 ;  }  额，能解释下我那个解法为什么不行吗？或者能行的能告诉我怎么修改吗？我挺想知道自己错在了哪?

user: user-2
content: #include <stdio.h>   #include<string.h>   int main(int argc,char* argv[])  {     int i,len,n,k;   char str[1001],s[1001] ;   {             scanf("%d%s",&n,str); 	len=strlen(str); 	k=n%len; //>=len的移动是重复的 	/*题目所要求的移动是一种循环移动，如果把字符串首尾相连的话，就是起点位置的移动，作为字符串，以k为分界前后对换即可实现*/ 	strncpy(s,str+len-k,k); 	strncpy(s+k,str,len-k); 	s[len]='\0' ;         printf("%s\n",s);    }   return 0 ;  }

user: user-3
content: 改这样试试：#include<stdio.h> #include<string.h> int main() {     int i,len,n,m;     char a[1001],w;     scanf("%d",&n);     getchar();     gets(a);     len = strlen(a);     for(i=1;i<=n;i++){         for(m=len-1,w=a[m];m>0;m--){             a[m] = a[m-1];         }         a[m]=w;     }     puts(a);         return 0; }

user: user-3
content: 什么样的错误提示？

user: user-0
content: 引用 3 楼 user-3的回复:修正楼上的，第22行增加printf("\n"); :#include<stdio.h>  int main() {     int i,j,n,m;     char a[1024],w;     j=0;     scanf("%d",&n);     getchar();     while((a[j]=getchar())!='\n'){           j++;     }     for(i=1;i<=n;i++){         for(m=j-1,w=a[m];m>0;m--){             a[m] = a[m-1];         }         a[m]=w;     }     for(i=0;i<j;i++){         printf("%c",a[i]);     }     printf("\n");          return 0; } 额，好像不行，心态崩了，好难啊

user: user-3
content: 修正楼上的，第22行增加printf("\n"); :#include<stdio.h>  int main() {     int i,j,n,m;     char a[1024],w;     j=0;     scanf("%d",&n);     getchar();     while((a[j]=getchar())!='\n'){           j++;     }     for(i=1;i<=n;i++){         for(m=j-1,w=a[m];m>0;m--){             a[m] = a[m-1];         }         a[m]=w;     }     for(i=0;i<j;i++){         printf("%c",a[i]);     }     printf("\n");          return 0; }

user: user-3
content: 修改如下，供参考：#include<stdio.h>  int main() {     int i,j,n,m;     char a[1024],w;     j=0;     scanf("%d",&n);     getchar();     while((a[j]=getchar())!='\n'){           j++;     }     for(i=1;i<=n;i++){         for(m=j-1,w=a[m];m>0;m--){             a[m] = a[m-1];         }         a[m]=w;     }     for(i=0;i<j;i++){         printf("%c",a[i]);     }          return 0; }

user: user-3
content: 第一眼看去，输入应该改这样： while((a[j]=getchar())!='\n'){           j++;     }