向结构体数组输入数据出错 不知道错在哪解决方案

向结构体数组输入数据出错 不知道错在哪
#include<stdio.h>
#include<string.h>
//#include<stdlib.h>
#include <windows.h>
//#define LINE printf("-------------------------------------------\n")
#define pause system("pause")
//#define ADR(name) "C:\Documents and Settings\fhg\桌面\C++系统缓冲文件\name"
//#include<malloc.h>
typedef int ZS;
typedef long CZ;
typedef float FD;
typedef char ZF;


#define SS struct student
SS{
CZ num;
ZF name[20];
FD sco[3];
}s[5];

void main()
{

ZS i,j;
for(i=0;i<5;i++)
{
scanf("%ld%s",&s[i].num,&s[i].name);//用s[i].name也出错 
for(j=0;j<3;j++)
scanf("%f",&s[i].sco[j]);
}
}


如输入 10 abc 10 10 10 按回车就出现错误,VC++6.0。XP系统

------解决方案--------------------
%lf试试?
------解决方案--------------------
void main()
{

ZS i,j;
for(i=0;i<5;i++)
{
scanf("%ld%s",&s[i].num,s[i].name);
for(j=0;j<3;j++)
scanf("%f",&(s[i].sco[j]));
}
}
------解决方案--------------------
C/C++ code

#include<stdio.h>
#include<string.h>
//#include<stdlib.h>
//#define LINE printf("-------------------------------------------\n")
#include <Windows.h>
#define pause system("pause")
//#define ADR(name) "C:\Documents and Settings\fhg\桌面\C++系统缓冲文件\name"
//#include<malloc.h>
typedef int ZS;
typedef long CZ;
typedef float FD;
typedef char ZF;


#define SS struct student
SS{
    CZ num;
    ZF name[20];
    FD sco[3];
}s[5];

void main()
{
    ZS i,j;
    for(i=0;i<5;i++)
    {
        //printf("input num and name: \n");
        scanf("%ld%s",&s[i].num,s[i].name);//用s[i].name也出错
        //printf(" %d->num is %ld; name is %s\n", i, s[i].num, s[i].name);
        for(j=0;j<3;j++)
    {
        //  printf("input the sco: \n");
            scanf("%f",&s[i].sco[j]);
        //  printf("%d[%d]->sco is :%f\n", i, j, s[i].sco[j]);
    }
     }
}