为什么第一种做不出来,和第二种有什么区别?

 #include <stdio.h>
void P(int x[])
{
    int m,n,t;
        scanf("%d%d",&m,&n);
        t=x[m];
    x[m]=x[n];
    x[n]=t;

}
void R(int x[],int y)
{    int u;
    for(int i=0;i<y/2;i++)
    {u=x[i];
    x[i]=x[y-1-i];
    x[y-1-i]=u;
    }


}
void D(int x[],int y)
{
        int t;
        scanf("%d",&t);
    for(int i=0;i<y;i++)
    x[i]/=t;
}
void M(int x[],int y)
{
        int t;
        scanf("%d",&t);
    for(int i=0;i<y;i++)
    x[i]*=t;
}
void S(int x[],int y)
{    int t;
        scanf("%d",&t);
    for(int i=0;i<y;i++)
    x[i]+=x; 
}


int main()
{
    int n,m,i,j;
    int p[1000]={0};
    scanf("%d%d",&n,&m);
        for(i=0;i<n;i++)
    scanf("%d",&p[i]);
    char a;
        for(j=0;j<m;j++)
    {

        getchar();
        a=getchar();
        switch(a)
    {
        case'S':S(p,n);break;
        case'M':M(p,n);break;
        case'D':D(p,n);break;
        case'R':R(p,n);break;
        case'P':P(p);break;
    }
    }
    for(i=0;i<n;i++)
    {
    printf("%d",p[i]);
    if(i!=n-1)
    printf(" ");
}

 } 
 #include <stdio.h>
int main()
{
    int n,m,i,j,s;
    int p[1000]={0};
    scanf("%d%d",&n,&m);
        for(i=0;i<n;i++)
    scanf("%d",&p[i]);
    char a;
        for(j=0;j<m;j++)
    {

        getchar();
        a=getchar();
        switch(a)
    {
        case'S':scanf("%d",&s);for(i=0;i<n;i++)p[i]=p[i]+s;break;
        case'M':scanf("%d",&s);for(i=0;i<n;i++)p[i]=p[i]*s;break;
        case'D':scanf("%d",&s);for(i=0;i<n;i++)p[i]=p[i]/s;break;
        case'R':for(i=0;i<n/2;i++){int u;
        u=p[i];
        p[i]=p[n-1-i];
        p[n-i-1]=u;

    }
          break;
        case'P':{
                    int m,n,t;
                scanf("%d%d",&m,&n);
                 t=p[m];
                p[m]=p[n];
                p[n]=t;break;}
    }
    }
    for(i=0;i<n;i++)
    {
    printf("%d",p[i]);
    if(i!=n-1)
    printf(" ");
}

 } 

两种方法都是解决同一个问题,为什么第二个能过,第一个出错了呀,求大神指点

void S(int x[], int y)
{
int t;
int i; //在c语言中要求将变量定义在前面,c++当中可以定义在任何位置
scanf("%d", &t);
for ( i = 0; i < y; i++)
x[i] += t;
}

这个函数把x[i]+=x
改成x[i]+=t

 void S(int x[], int y)
{
    int t;
    scanf("%d", &t);
    for (int i = 0; i < y; i++)
        x[i] += t;
}