当时只道是寻常 my first 仅以此篇作为一个开始
使用结构体实现对学生信息的存储、用顺序表实现了对于一个个结构体的存储整体
5月10日 还有待完善 没有循环插入 还没有做删除的函数
/**********************************************************
* file name:Struct
* function: 实现结构体的顺序表
* date: 2025.5.8
* note:none
* Copyright (c) 2025 l550036303@163.com Allright reserved
************************************************************/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Max 20
typedef struct StudentInformation {
char *name;
int ID;
char sex[10];
int age;
}stu;
typedef struct sequetable {
stu *student;
int len;
int maxlen;
}seqtab;
/******************************
* name:myaddone
* function: 实现增加一个学生的信息
* argument:
* @sq 指向seqtab顺序表的指针
* retval:none
* date: 2025.5.8
* note:none
*
********************************/
void myaddone(seqtab *sq){
if(sq->len >= sq->maxlen){
printf("size of sq is full");
return;
}
int n =sq->len;
sq->student[n].name =(char *) malloc(20 * sizeof(char));
if (sq->student[n].name == NULL) {
perror("内存分配失败");
return;
}
printf("plase input student infor\n");
printf("InforList:\tname\tID\tsex\tage\n");
// scanf("%s",sq->student[n].name);
scanf("%s %d %s %d",sq->student[n].name,&sq->student[n].ID,sq->student[n].sex,&sq->student[n].age);
(sq->len)++;
printf("!!!!!!!!!!!!!addsuccess!!!!!!!!!!!!!\n");
}
/******************************
* name:myprintf
* function:打印顺序表内所有学生的信息
* argument:
* @sq 指向seqtab顺序表的指针
* date:2025.5.8
* note:none
*
********************************/
void myprintf(seqtab *sq){
if(sq->len <= 0){
printf("no student information");
return;
}
for(int i=0 ; i < sq->len ;i++){
printf("****************************************\n");
printf("name:\t%s\n",((sq-> student)+i) -> name);
printf("ID:\t%010d\n",((sq-> student)+i) -> ID);
printf("sex:\t%s\n",((sq-> student)+i) -> sex);
printf("age:\t%d\n",((sq-> student)+i) ->age);
}
printf("****************************************\n");
return;
}
int main(void){
// stu stu1;
// stu1.name="abcd";
// printf("%s\n",stu1.name);
// printf("********************************************\n");
seqtab *sq1 = (seqtab *)malloc(sizeof(seqtab));
if (sq1 == NULL) {
fprintf(stderr, "Memory allocation failed!\n"); // 添加内存分配检查
exit(EXIT_FAILURE);
}
sq1->len=0;
sq1->maxlen=Max;
sq1->student =(stu *)malloc(sizeof(stu)*(sq1->maxlen));
if (sq1->student == NULL) {
fprintf(stderr, "Memory allocation failed!\n"); // 添加内存分配检查
exit(EXIT_FAILURE);
}
/*******************
*
*注入基本数据
*
********************/
sq1-> student->name=(char *)malloc( sizeof(char) * 20 );
sq1-> student->name= "xiaoming";
sq1-> student->ID= 20250106;
//sq1-> student->sex= "man";
strcpy(sq1->student->sex,"woman");
sq1-> student->age= 18;
(sq1->len)++;
// int choose;
// printf("请输入数字: ");
// if (scanf("%d", &choose) == 1) {
// printf("输入值: %d\n", choose);
// } else {
// printf("输入错误!\n");
// // 清空缓冲区
// while (getchar() != '\n');
// }
int choose;
while(1){
printf("input( number 1 or 2)\n(other number is quit):\n\t1:addinformantion\n\t2:printfinformation\n");
scanf("%d",&choose);
switch(choose){
case 1:myaddone(sq1); break;
case 2:myprintf(sq1);break;
default:
for(int j=1;j< sq1->len;j++){
free(sq1->student[j].name);
}
free(sq1->student);
free(sq1); return 0;
}
}
// myaddone(sq1);
myprintf(sq1);
// printf("%s\n",sq1->student->name);
// printf("%d\n",sq1->student->ID);
// printf("%s\n",sq1->student->sex);
// printf("%d\n",sq1->student->age);
// seqtab stab = malloc();
// int a=Max;
// printf("%d",a);
return 0;
}

浙公网安备 33010602011771号