RX0_UNICORN 的學生作業(yè):
#include
#include
#include
#define MAX 10
struct student
{
char name[20];
int id;
int score;
int age;
};
typedef struct student datatype_t;
typedef struct
{
datatype_t stu[MAX]; // 定義數(shù)組記錄班級學?每個學?的信息
int n; // 學?實際到來的個數(shù)
}seqlist_t;
seqlist_t *get_seqlist_t_addr()
{
seqlist_t *s_t = NULL;
int s_t_size = (sizeof(char) * 20 + sizeof(int) * 3) * MAX + sizeof(int);
s_t = (seqlist_t *)malloc(s_t_size);
if(NULL == s_t)
{
printf("malloc is fail!\n");
return NULL;
}
memset(s_t, 0, s_t_size);
return s_t;
}
void input_attendance_stu(seqlist_t *stp)
{
printf("please input attendance student data : ");
scanf("%d", &(stp -> n));
}
void input_student_data(seqlist_t *stp)
{
for(int i = 0; i < (stp -> n); i++)
{
printf("please input student data[NAME ID SCORE AGE] : ");
scanf("%s%d%d%d", (*stp).stu[i].name, &((*stp).stu[i].id),
&((*stp).stu[i].score), &((*stp).stu[i].age));
}
}
void output_student_data(seqlist_t *stp)
{
printf("NAME\tID\tSCORE\tAGE\n");
printf("--------------------------------------\n");
for(int i = 0; i < (stp -> n); i++)
{
printf("%s\t%d\t%d\t%d\n", (*stp).stu[i].name,
(*stp).stu[i].id,(*stp).stu[i].score, (*stp).stu[i].age);
printf("--------------------------------------\n");
}
}
int query_student_id(seqlist_t *s_t, const int id)
{
datatype_t st_id;
for(int i = 0; i < (s_t -> n); i++)
{
if(id == (*s_t).stu[i].id)
{
st_id = (*s_t).stu[i];
}
}
if(id != st_id.id)
{
return 1;
}
printf("NAME\tID\tSCORE\tAGE\n");
printf("%s\t%d\t%d\t%d\n", st_id.name, st_id.id, st_id.score, st_id.age);
return 0;
}
int main(int argc, const char *argv[])
{
int query_id;
// 表初始化
seqlist_t *s_t = get_seqlist_t_addr();
if(NULL == s_t)
{
printf("malloc is fail!\n");
return 1;
}
// 保存實到人數(shù)信息
input_attendance_stu(s_t);
if(MAX < (s_t -> n))
{
printf("Exceed the maximum limit : %d\n", MAX);
free(s_t);
s_t = NULL;
return 1;
}
// 保存學生信息
input_student_data(s_t);
printf("=====================================\n");
// 輸出保存的學生信息
output_student_data(s_t);
printf("=====================================\n");
// 根據(jù)用戶輸入的學生 ID 查詢學生信息并打印
printf("please input query student ID : ");
scanf("%d", &query_id);
int ret = query_student_id(s_t, query_id);
if(ret == 1)
{
printf("error : no student data\n");
free(s_t);
s_t = NULL;
return 1;
}
seqlist_t st = *s_t;
printf("班級第一個學生 id的值 : \n");
printf("NAME\tID\tSCORE\tAGE\n");
printf("%s\t%d\t%d\t%d\n", st.stu[0].name, st.stu[0].id,
st.stu[0].score, st.stu[0].age);
free(s_t);
s_t = NULL;
return 0;
}
【圖片】