请问一下这个c程序哪里错了??谢谢!!

题目:有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面的m个数,写出一函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数。(如:输入1 2 3 4 5 ,n=5,m=2,输出4 5 1 2 3)

#include
int main()
{void move(int ,int,int);
int n,m,number[20],i;
printf("how many number?");
scanf("%d",&n);
printf("enter %d number:",n);
for(i=0;i<=n-1;i++)
scanf("%d",&number[i]);
printf("how many number u wanto move? ");
scanf("%d",&m);
move(number,n,m);
for(i=0;i<=n-1;i++)
printf("%d\t",number[i]);
return 0;
}
void move(int *p,int n,int m)
{int a[20],i,t;
for(i=0;i<=m-1;i++)
a[i]=
(p+n-m+i);
for(t=1;t<=m;t++)
{for(i=n-m-1;i>=0;i--)
(p+i+1)=(p+i);}
for(i=0;i<=m-1;i++)
*(p+i)=a[i];
}

(可以运行,如果输入1 2 3 4 5,m=2,输出的是 4 5 1 2 5)帮忙看一下哪里有问题。。谢谢!!


#include <stdio.h>
int main()
{
    void move(int *, int, int);
    int n, m, number[20], i;
    printf("how many number?");
    scanf_s("%d", &n);
    printf("enter %d number:", n);
    for (i = 0; i <= n - 1; i++)
        scanf_s("%d", &number[i]);
    printf("how many number u wanto move? ");
    scanf_s("%d", &m);
    move(number, n, m);
    for (i = 0; i <= n - 1; i++)
        printf("%d\t", number[i]);
    return 0;
}
void move(int *p, int n, int m)
{
    for (int i = 0; i < m; i++)
    {
        int t = *(p + n - 1);
        for (int j = n - 2; j >= 0; j--)
        {
            p[j + 1] = p[j];
        }
        p[0] = t;
    }
}

 int main()
{
    void move(int* ,int,int);
    int n,m,number[20],i;
    printf("how many number?");
    scanf("%d",&n);
    printf("enter %d number:",n);
    for(i=0;i<=n-1;i++)
        scanf("%d",&number[i]);
    printf("how many number u wanto move? ");
    scanf("%d",&m);


    move(number,n,m);
    for(i=0;i<=n-1;i++)
        printf("%d\t",number[i]);
    return 0;
}
void move(int *p,int n,int m)
{
    int a[20],i,t;
    for(i=0;i<=m-1;i++)
        a[i] = *(p+n-m+i);
    for(t=1;t<=m;t++)
    {
        for(i=n-m-1+(t-1);i>=t-1;i--)
            *(p+i+1) = *(p+i);
    }
    for(i=0;i<=m-1;i++)
        *(p+i)=a[i];
}

最后有个循环控制的不对。

move里面的算法写的不对啊

我没用指针写了一个,简单点
#include

int main()
{
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 8, 9};
int b[10];
int i;
int m;

scanf("%d", &m);
for (i = 0; i < m; i++)
{
    b[i] = a[10 - m + i];
}
for (i = 0; i < 10 - m; i++)
{
    b[m + i] = a[i];
}

for (i = 0; i < 10; i++)
{
    printf("%d", b[i]);
}
return 0;

}


#include "stdio.h"
void move(int *p,int n,int m)
{
int a[20],i,t,j;
for(i=0,j=0;j<n-m&&i<n;i++)
{
if(i<=m-1)

       a[i]=*(p+n-m+i);
    else
    {
            a[i]=*(p+j);
            j++;
    }
 }           
for(i=0;i<=n-1;i++)
     *(p+i)=a[i];

}
int main()
{
int a;
int n,m,number[20],i;
printf("how many number? ");
scanf("%d",&n);
printf("enter %d number:\n",n);
for(i=0;i<=n-1;i++)
scanf("%d",&number[i]);
printf("how many number u wanto move? ");
scanf("%d",&m);
move(number,n,m);
for(i=0;i<=n-1;i++)
printf("%d\t",number[i]);
scanf("%d",&a);
return 0;
}