user-0 提问: 学生班级管理程序求助，谢谢谢谢

回复:
user: user-0
content: 谢谢谢谢，我明白了，之前还没注意到原来这里也有问题，谢谢

user: user-1
content: 初学的时候， 不要假定自己的scanf回来的数就一定是对的 scanf之后马上把刚才读入的数printf一次，看看  注意利用好scanf函数都返回值， 如果scanf格式指定输入3个数，正确输入后scanf会返回3， 如果不全正确返回的就是正确获得到的数  以刚才的例子 scanf("%d,%s,%f",&students[i].id,students[i].name,&students[i].score); 如果你输入的是 123 xyz  34 那么scanf返回就是1， 只有第一个id被正确读取到，后面没有遇到逗号，其他的输入都没有正确的被返回 如果你输入的是123,xyz,34 也未必能正确的读取到三个 有的编译器可以，有的编译器会认为xyz,34 都是字符串， 安全带做法，老实的指定scanf（"%d%s%d"）; 输入123 xyz 34这样的最好 非要用逗号， 需要这样指定 scanf("%d,%[^,],%d", &....)

user: user-1
content: printf("please input id,name,score:"); scanf("%d,%s,%f",&students[i].id,students[i].name,&students[i].score); // 这个scanf都格式要求输入的形式是     123, name, 89 // 如果输入的时候不带逗号，读取不到正确的数字 printf("piease input year-month-day:"); scanf("%d%d%d",&year,&month,&day); // 这个scanf格式的要求是输入 2000 12 20  这里，如果真的按照提示 2000-12-20输入反而是错的,，  会把month和day读成-12和-20 输入格式必须和指定的格式匹配，如果希望用户如数2000-12-20这种 scanf("%d-%d-%d", &year, &month, &day);这样输入2000-12-20才可以正确获得输入

user: user-0
content: 谢谢谢谢！！！

user: user-2
content: #include<stdio.h> #include<stdlib.h> #include<string.h>   typedef union {     struct{         unsigned int year:12;         unsigned int month:4;         unsigned int day:5;     };     unsigned int value; }DATE;  int compare_date(DATE d1, DATE d2) {     if (d1.value==d2.value)     {         return 0;     }     else if (d1.value<d2.value)     {         return -1;     }     else         return 1; }  typedef enum gender{male,female}GENDER;  typedef struct _student{     int id;     char name[20];     float score;     GENDER gender;     DATE birthday; }STUDENT;  STUDENT students[40]; DATE d; int count=0;     void main() {     //1.输入学生信息：学号，姓名，性别，出生日期，成绩     int i;     char NAME[20];     int year,month,day;       printf ("please input the number of student:");     scanf("%d",&count);      for(i=0;i<count;i++)     {         printf("please input id,name,score:");         scanf("%d,%s,%f",&students[i].id,students[i].name,&students[i].score);         printf("piease input year-month-day:");         scanf("%d%d%d",&year,&month,&day);         d.year=year;         d.month=month;         d.day=day;           printf("please input gender(male=0,female=1):");         scanf("%d", &students[i].gender);         switch(students[i].gender)         {             case male:                 puts("男");                 break;             case female:                 puts("女");                 break;         }     }          //2.查找并显示学生信息     for(i=0;i<count;i++)     {         if(strcmp(students[i].name,NAME)==0)         {             printf("the information of student(id,name,score,birthday,gender):");             for (i=0;i<count;i++)             {                 //printf("id:%s",students[i].id);                 printf("id:%d", students[i].id);                 //printf("name:%d",students[i].name);                 printf("name:%s",students[i].name);                 printf("the birthday of student:");                 printf("%4d-%02d-%02d",d.year ,d.month ,d.day );                 printf("gender:");                 switch(students[i].gender)                 {                     case male:                         puts("男");                         break;                     case female:                         puts("女");                         break;                 }              }         }         else         {             printf("error");         }     }      //3.统计平均成绩和及格率      //4. 查找显示年龄最小的学生的信息；  }  供参考～ 代码有些地方有问题，建议对比看一下自己的问题～  ./test please input the number of student:2 please input id,name,score:1,Lucy,88 piease input year-month-day:2020 3 3 please input gender(male=0,female=1):0 男 please input id,name,score:2,John,99 piease input year-month-day:2021 4 3 please input gender(male=0,female=1):1 女 errorerror 输入的内容。 建议楼主对比一下自己的输入。