求解个c程序解决方案

求解个c程序
#include "stdio.h"
#include "stdlib.h"
#define M 6
#define N 5
void getdata(int (*)[M]);
void lineave(int [][M],float *);
void outdata(int [N][M],float *);
main()
{
int r[N][M];float ave[N];
getdata(r);
lineave(r,ave);
outdata(r,ave);
}
void getdata(int (*s)[M])
{
int i,j,x;
for(i=0;i<N;i++)
{  
  j=0;
  while(j<M)
{
x=rand()%41;
if(x>10)
{
s[i][j]=x;
j++;
}
}
}
}
void lineave(int s[][M],float *a)
{
int i,j;
float ave;
for(i=0;i<N;i++)
{
ave=0.0;
for(j=0;j<M;j++)
ave+=s[i][j];
a[i]=ave/M;
}
}
void outdata(int s[N][M],float *a)
{
int i,j;
printf("the all number is");
for(i=0;i<N;i++)
{ for(j=0;j<M;j++)
printf(" %d ",s[i][j]);
 printf("the ave of every line is%6.8d\n",a[i]);
}
}
请问下为什么在outdata的函数中 a[]的数组数据会丢失

------解决方案--------------------
printf("the ave of every line is%6.8d\n",a[i]);//把这句中的%6.8d改成%6.8f就可以了。输出的是float类型,所以不可以使用%d。