#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NAMEMAX 1024//设计一个最大值
typedef struct student_st
{
int id;
char *name; //定义一个指针用来接收malloc函数返回的内存地址
float math,chinese;
}STU,*STUP; //定义一个struct student_st类型的结构体变量名称,和一个结构体指针
int stu_input(STU *p) //把结构体的首地址传递过来
{
char name[NAMEMAX];
printf("Please enter for stu:");
scanf("%d%s%f%f",&p->id,name,&p->math,&p->chinese);
if(strlen(name) >= NAMEMAX)//输入的长度值如果超过最大值就结束
return -1;
p->name = malloc(strlen(name)+1);//申请一个刚才输入的name的大小并且加上结束字符(+1)这个字节,把指针返回给
if(p->name == NULL) //申请内存失败就退出
return -2;
strcpy(p->name,name);
return 0;
}
void stu_display(STU *p)
{
printf("%d %s %f %f\n",p->id,p->name,p->math,p->chinese);
}
int stu_changename(STU *p)
{
char newname[NAMEMAX];
printf("Please enter the newname:");
scanf("%s",newname);
if(strlen(newname) >= NAMEMAX)//如果新输入的名字长度大于最大长度就退出
return -1;
free(p->name); //释放指针P的内存
p->name = malloc(strlen(newname)+1);
if(p->name == NULL)
return -2;
strcpy(p->name,newname);
return 0;
}
void menu(void)
{
printf("\n\n");
printf("3 changname data\n");
printf("\n");
}
int stu_init(STU *p)
{
p->id = 0;
p->math = 0;
p->chinese = 0;
p->name = malloc(1);
if(p->name == NULL)
return 0;
}
void stu_destroy(STU *p)
{
free(p->name);
}
int main()
{
STU stu;
int choice;
stu_init(&stu);
/*if error*/
do
{
menu();
printf("Please choice(q for quit):");
if(scanf("%d",&choice) != 1)
break;
switch(choice)
{
case 1:
stu_input(&stu);
break;
case 2:
stu_display(&stu);
break;
case 3:
stu_changename(&stu);
break;
default:
printf("Unknow choice.\n");
continue;
}
}while(1);
stu_destroy(&stu);
exit(0);
}
#include <stdlib.h>
#include <string.h>
#define NAMEMAX 1024//设计一个最大值
typedef struct student_st
{
int id;
char *name; //定义一个指针用来接收malloc函数返回的内存地址
float math,chinese;
}STU,*STUP; //定义一个struct student_st类型的结构体变量名称,和一个结构体指针
int stu_input(STU *p) //把结构体的首地址传递过来
{
char name[NAMEMAX];
printf("Please enter for stu:");
scanf("%d%s%f%f",&p->id,name,&p->math,&p->chinese);
if(strlen(name) >= NAMEMAX)//输入的长度值如果超过最大值就结束
return -1;
p->name = malloc(strlen(name)+1);//申请一个刚才输入的name的大小并且加上结束字符(+1)这个字节,把指针返回给
if(p->name == NULL) //申请内存失败就退出
return -2;
strcpy(p->name,name);
return 0;
}
void stu_display(STU *p)
{
printf("%d %s %f %f\n",p->id,p->name,p->math,p->chinese);
}
int stu_changename(STU *p)
{
char newname[NAMEMAX];
printf("Please enter the newname:");
scanf("%s",newname);
if(strlen(newname) >= NAMEMAX)//如果新输入的名字长度大于最大长度就退出
return -1;
free(p->name); //释放指针P的内存
p->name = malloc(strlen(newname)+1);
if(p->name == NULL)
return -2;
strcpy(p->name,newname);
return 0;
}
void menu(void)
{
printf("\n\n");
printf("--------MENU--------\n");
printf("1 input data\n");
printf("2 display data\n");printf("3 changname data\n");
printf("\n");
}
int stu_init(STU *p)
{
p->id = 0;
p->math = 0;
p->chinese = 0;
p->name = malloc(1);
if(p->name == NULL)
return -1;
p->name[0] = '\0';return 0;
}
void stu_destroy(STU *p)
{
free(p->name);
}
int main()
{
STU stu;
int choice;
stu_init(&stu);
/*if error*/
do
{
menu();
printf("Please choice(q for quit):");
if(scanf("%d",&choice) != 1)
break;
switch(choice)
{
case 1:
stu_input(&stu);
break;
case 2:
stu_display(&stu);
break;
case 3:
stu_changename(&stu);
break;
default:
printf("Unknow choice.\n");
continue;
}
}while(1);
stu_destroy(&stu);
exit(0);
}