#define NULL 0
#define STU struct stu
#include <malloc.h>
#include<stdio.h>
STU
{
float num;      //这里改成int 就ok ! 精度为什么就不行?(当然输出也改成%d)
char name[20];
STU *next;
};


main()
{STU *p1,*p2,*head;
printf("input the num :输如:\n");
head=(STU *) malloc(sizeof(STU));
p1=p2=head;
     scanf("%f",&p2->num);
     fflush(stdin);
printf("input the name :\n");
     scanf("%[^\n]",p2->name);
     fflush(stdin);   

while(p2->num != 0 )
      {p2=(STU *)malloc(sizeof(STU));
       printf("input the num :输如:\n");
           scanf("%f",&p2->num);
           fflush(stdin);
           if (p2->num==0)break;
       printf("input the name :\n");
           scanf("%[^\n]",p2->name);
           fflush(stdin);    
       p1->next=p2;
       p1=p2;
       }
p1->next=NULL;
printf("\n");     
do
   {printf("%f\n",head->num);
    printf("%s\n",head->name);
    head=head->next;
    printf("\n");
    }while (head!=NULL);

}
以上为处理链表的一段代码
请问:1、为什么记录类型中定义的 num 为精度时就报错阿 ?
         是不是输入时的什么格式没有注意到?
请问:2、为什么将 num 定义成 int 就没事了呢 ?(当然输出时的格式符也要改)

先谢过了!!!!!!!!!!!!
[em1][em1][em1][em1][em1][em1][em1][em1][em1][em1][em1][em1][em1][em1]