C
语言中,结构体(struct)是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。
结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
定义与声明
结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。
在实际应用中,C语言结构体数组常被用来表示一个拥有相同数据结构的群体,比如一个班的学生、一个车间的职工等。
在C语言中,定义结构体数组和定义结构体变量的方式类似;
例:
struct stu{
char*name//姓名
int num//学号
int age//年龄
char group//所在小组
float score//成绩
}class[5]
表示一个班级有5个学生。
扩展资料:结构体数组的引用与引用一个结构体变量在原理上是一样的。只不过结构体数组中有多个结构体变量,我们只需利用for循环一个一个地使用结构体数组中的元素。
下面编写一个程序,编程要求:从键盘输入5个学生的基本信息,如姓名、年龄、性别、学号,然后将学号最大的学生的基本信息输出到屏幕。
#include&ltstdio.h&gt
#include&ltstring.h&gt
struct STU
{
char name[20]
int age
char sex
char num[20]
}
void OutputSTU(struct STU stu[5])
//函数声明,该函数的功能是输出学号最大的学生信息
int main(void)
{
int i
struct STU stu[5]
for(i=0i&lt5++i)
{
printf("请输入第%d个学生的信息:",i+1)
scanf("%s%d%c%s",
stu&lti&gt.name,
&stu&lti&gt
.age,&stu&lti&gt
.sex,stu&lt
i&gt.num)/*%c
前面要加空格,不然输入时会将空格赋给%c*/
}
OutputSTU(stu)
return 0
}
void OutputSTU(struct STU stu[5])
{
struct STU stumax=stu[0]
int j
for(j=1j&lt5++j)
{
if(strcmp(stumax.num,stu[j]
.num)&lt0)//strcmp函数的使用
{
stumax=stu[j]
}
}
printf("学生姓名:%s学生年龄:%d学生性别:%c学生学号:
%s\n",stumax.name,
stumax.age,stumax.
sex,stumax.num)
}
输出结果是:
请输入第1个学生的信息:小红22 F Z1207031
请输入第2个学生的信息:小明21 M Z1207035
请输入第3个学生的信息:小七23 F Z1207022
请输入第4个学生的信息:小欣20 F Z1207015
请输入第5个学生的信息:小天19 M Z1207024
学生姓名:小明学生年龄:21学生性别:M学生学号:Z1207035
参考资料:
百度百科——结构体
number是指针,指向常量字符串,输入的时候,改变的其实是number的空间,也就是出现了野指针,导致程序出错修改方式很简单,把char*number,改成char number[100]就可以了
只改定义一处,其他的不需要改动
具体大小,取决于你的需求
第一个是正确的后续, 由于%c读取了上一个输入的换行, 导致出错。
修改方法
在scanf的for循环中, scanf下面一行, 加一句getchar()
注意加大括号。