运行不出结果。。。。

#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 50
//三元组结构
typedef struct
{
  int r,c;  //矩阵行下标和列下标
  int v;   //值
}Triple;
//矩阵结构
typedef struct
{
    Triple data[MAXSIZE];
    int num[MAXSIZE];//存放各行非零元个数
    int rops[MAXSIZE+1];    //存放各行第一个非零元在矩阵中的位置
    int mu,nu,tu;    //矩阵的行数、列数、非零元个数
}matrix;

//输入矩阵
void Init(matrix *M)
{
   int i;
   int u,v;
   int p[8][8];
   if(M->mu<1||M->nu<1||M->tu>M->mu*M->nu)
   {
       printf("出错\n");
   }
   for(u=1;u<=M->mu;u++)
    for(v=1;v<=M->nu;v++)
       p[u][v]=0;
  for(i=1;i<=M->tu;i++)
  {
      printf("第%d个非零元的行号:",i);
      scanf("%d",&M->data[i].r);
      printf("\n");
      printf("第%d个非零元得列号:",i);
      scanf("%d",&M->data[i].c);
      printf("\n");
      printf("第个非零元的值:",i);
      scanf("%d",&M->data[i].v);
      p[M->data[i].r][M->data[i].c]=M->data[i].v;
  }
  printf("\n");
  printf("您创建的矩阵如下:\n");
  for(u=1;u<=M->mu;u++)
  {for(v=1;v<=M->nu;v++)
    { printf("%d ",p[u][v]);}
    printf("\n");
   
  }    
}
int Cheng(matrix *M,matrix *T,matrix *G)
{ int u,v,w,k;
  int p1[MAXSIZE+1][MAXSIZE+1];
  for(u=1;u<=M->mu;u++)
  {for(v=1;v<=M->nu;v++)
       p1[u][v]=0;
  }
  if (M->nu!= T->mu)
    {
       printf("不能相乘\n");
        return 1;
    }
    //Q的初始化
    G->mu=M->mu;
    G->nu=T->nu;
    G->tu=0;
    int mrow, nrow, p, q, t, tp, qcol;
    int ctemp[MAXSIZE+1]; 
    for(mrow=1;mrow<M->mu;mrow++)  //清零
  {
      M->num[mrow]=0;
  }
  for(w=1;w<=M->tu;w++)   //M中的非零个数
  {
      k=M->data[w].r;
      M->num[k]++;
  }
  M->rops[1]=1;  //第一行第一个非零元的位置在data[]的第一位
for(mrow=2;mrow<=M->mu;mrow)
{
     M->rops[mrow]=M->rops[mrow-1]+M->num[mrow-1];
}

//记录矩阵T中各行非零元的个数
for(nrow=1;nrow<T->mu;nrow++)  //清零
{
     T->num[nrow]=0;
}
for(w=1;w<=T->tu;w++)     //T中的非零个数
{
     k=T->data[w].r;
     T->num[k]++;
}
T->rops[1]=1;    //第一行第一个非零元的位置在data的第一位
for(nrow=2;nrow<=T->mu;nrow++)
{
   T->rops[nrow]=T->rops[nrow-1]+T->num[nrow-1];
}

    //辅助数组
    //如果Q是非零矩阵
    if (M->tu*T->tu!=0)
    {
        for (mrow=1; mrow<= M->mu;++mrow)
        {
            //当前行各元素累加器清零
            for(int x=1;x<=T->nu;x++)
            {ctemp[x];}
            //end_x
            //当前行的首个非零元素在三元组中的位置为此行前所有非0元素加1
            G->rops[mrow]=G->tu+1;
            if (mrow<M->mu)
            {
                tp=M->rops[mrow+1];
            }
            else
                tp=M->tu+1;
            for (p=M->rops[mrow]; p<tp;++p)        //对当前行的每个非零元素操作
            {
                nrow=M->data[p].c;        //在N中找到与M操作元素的c值相等的行值r
                if (nrow<T->mu)
                {
                    t = T->rops[nrow+1];
                }
                else
                    t = T->tu+1;
                //对找出的行的每个非零元素进行操作
                for (q = T->rops[nrow];q<t;++q)
                {
                    qcol = T->data[q].c;
                    //将乘得到的对应值放在相应元素的累加器里面
                    ctemp[qcol] += M->data[p].v*T->data[q].v;
                }
            }//p_end_for
            
            //对已经求出的累加器中的值压缩到Q中
            for (qcol=1;qcol<=T->nu;qcol++)
            {
                    if (++T->tu>MAXSIZE)
                    {
                        printf("错误\n");
                          return 1;
                    }
                if (ctemp[qcol])
                {
                      
                    G->data[G->tu].r = mrow;
                    G->data[G->tu].c = qcol;
                    p1[G->data[G->tu].r][G->data[G->tu].c] = ctemp[qcol];
                    
                  
                }
            }//qcol_end_for
        }//arow_end_for
    }//end_if
    printf("两矩阵相乘的结果为:\n");

   for(u=1;u<=M->mu;u++)
    {  for(v=1;v<=M->nu;v++)
    {printf("%d ",p1[u][v]);}
    printf("\n");
    }

  return 0;  
}



int main()
{
  matrix *M=(matrix*)malloc(sizeof(matrix));
  matrix *T=(matrix*)malloc(sizeof(matrix));
  matrix *G=(matrix*)malloc(sizeof(matrix));
  int tag=1;
  int n;
   printf("请输入第一个矩阵的行数和列数及非零元的个数:");
   scanf("%d%d%d",&(M->mu),(&M->nu),(&M->tu));
   
   Init(M);
   printf("\n");

   printf("请输入第一个矩阵的行数和列数及非零元的个数:");
   scanf("%d%d%d",&(T->mu),(&T->nu),(&T->tu));
   Init(T);
   printf("\n");

  while(tag)
  {
      printf("请输入相乘(3)、退出(4)");
      printf("\n");
      scanf("%d",&n);
      switch(n)
      {
        case 3:Cheng(M,T,G);break;
        case 4:tag=0;
      }
  }
  return 0;
}