急问:将txt文件中的数据保存在二维数据里!解决方法

急问:将txt文件中的数据保存在二维数据里!
生成的已经保存在txt文件中的数据如下:
45.3680200427468 15.1191229015105 58.6355690654011 69.1673687318070
68.6732185041066 43.9845500378346 54.7937290823995 55.9530499802563
45.2761771426101 35.9990290723335 50.5691579981557 44.9158774843393
61.9262047887758 23.1900306124136 27.3274749617222 50.3891264767777

c语言程序如下:
#include<stdio.h>
#include<math.h>
#define N 4 //定义二维数组的大小
void main( )
{
  FILE *fp;
  float a[N][N]={0}; //是否要定义为float型呢?
  int i=0,j=0;
  char bufs[7];

  fp=fopen("data.txt","rb");
  //文件定位
  fseek(fp,0l,0);
  while(!feof(fp))
  { //偏移量
  fseek(fp,4l,SEEK_CUR);
  //读取文件块
  fgets(bufs,17,fp);  
  a[i][j]=atof(bufs);
   
  //计算下标
  j++;
  if(j>N-1){i++;j=0;fseek(fp,1l,SEEK_CUR);}
  if(i>N-1) break;

  }
  //将a[i][j]全部保留两位有效数字
for(i=0;i<N;i++)
for(j=0;j<N;j++)
a[i][j]=float(a[i][j],2);//保留两位有效数字,这句该怎么写?
  //输出
  for(i=0;i<N;i++)
  { for(j=0;j<N;j++)
  printf("%.2lf ",a[i][j]);  
  printf("\n");
  }
  //关闭文件
  fclose(fp);

}

请帮忙修改上面的代码。
非常感谢!

------解决方案--------------------
每行4个浮点数,用fscanf不更方便。
------解决方案--------------------
C/C++ code
//data.txt
//45.3680200427468 15.1191229015105 58.6355690654011 69.1673687318070
//68.6732185041066 43.9845500378346 54.7937290823995 55.9530499802563
//45.2761771426101 35.9990290723335 50.5691579981557 44.9158774843393
//61.9262047887758 23.1900306124136 27.3274749617222 50.3891264767777
#include<stdio.h>
#define N 4 //定义二维数组的大小
FILE *fp;
double a[N][N];
int i,j;
void main() {
    fp=fopen("data.txt","r");
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            fscanf(fp,"%lf",&a[i][j]);
    fclose(fp);
    for(i=0;i<N;i++) {
        for(j=0;j<N;j++) {
            printf("%.2lg ",a[i][j]);//保留两位有效数字输出
        }
        printf("\n");
    }
}
//45 15 59 69
//69 44 55 56
//45 36 51 45
//62 23 27 50