C语言结构体:从函数返回结构体变量的值
在C语言中,结构体的定义有两种书写方式。
- 结构体变量的定义:
struct student
{
char name[10], num[10];
int score;
};
此时在主类mian()方法中声明变量时必须要使用 struct student stu1。
- 用typedef定义数据类型:
typedef struct student
{
int iNum;
char cName[10];
double fCh, fMath, fEng;
} STUDENT;
此时在主类main()方法中声明变量时使用 STUDENT stu1 。
习题:
程序的功能是:已知5名学生信息,从键盘输入学生姓名,根据姓名查找该学生是否存在,如果存在则输出学生信息,否则输出不存在提示。
#include <stdio.h>
#include <string.h>
/* User Code Begin(考生可在本行后添加代码,例如结构体类型的定义、函数原型声明等,行数不限) */
typedef struct student //由main函数中的声明可知是用typedef定义
{
int iNum;
char cName[10];
double fCh, fMath, fEng;
} STUD;
STUD *FindByName(STUD sTranscript[], int n, char name[16]);
/* User Code End(考生添加代码结束) */
int main(void)
{
STUD sTranscript[] = { {1001, "张三丰", 69.5, 61.5, 91.5}, {1002, "李云龙", 92.5, 67.5, 81.5},
{1003, "郭 靖", 79.5, 67.5, 86.5 }, {1004, "苗翠花", 83.0, 75.5, 84.0},
{1005, "张无忌", 65.5, 81.5, 71.0} };
STUD *stu;
char name[16];
printf("请输入你要查找的学生姓名: ");
gets(name);
stu = FindByName(sTranscript, 5, name); //调用函数查找信息
if (stu)
{
printf("\n查找的学生信息为: ");
printf("%d %s %.1f %.1f %.1f\n", stu->iNum, stu->cName, stu->fCh, stu->fMath, stu->fEng);
}
else
{
printf("\n你要查找的学生不存在!\n");
}
return 0;
}
/* User Code Begin:考生在此后完成自定义函数的设计,行数不限 */
STUD *FindByName(STUD sTranscript[], int n, char name[16])
{
int i;
for (i = 0; i < n; i++)
{
if (strcmp(sTranscript[i].cName, name) == 0) //字符串比较是否相同
{
return &sTranscript[i]; //返回该学生信息在数组中存放地址值
}
}
return 0;
}